00001
00002 ! ------------------- PSMILe include file psmile.inc -------------------
00003 !
00004 ! $Id: psmile.inc 2937 2011-02-03 10:18:38Z redler $
00005 ! $Author: redler $
00006 !
00007 !-----------------------------------------------------------------------
00008 ! Copyright 2006-2010, CERFACS, Toulouse, France.
00009 ! Copyright 2006-2010, SGI Germany, Munich, Germany.
00010 ! Copyright 2006-2010, NEC Europe Ltd., London, UK.
00011 ! All rights reserved. Use is subject to OASIS4 license terms.
00012 !-----------------------------------------------------------------------
00013 !BOP
00014 !
00015 ! !INCLUDE: psmile.inc
00016 !
00017 ! !DESCRIPTION:
00018 !
00019 ! Declaration of all PSMILe internal named parameters. This file is included
00020 ! by the driver and PSMILe library routines via use of psmile_common module.
00021 !
00022 !
00023 ! !REVISION HISTORY:
00024 !
00025 ! Date Programmer Description
00026 ! ---------- ---------- -----------
00027 ! 03.09.23 R. Redler created
00028 !
00029 !
00030 !EOP
00031 !-----------------------------------------------------------------------
00032 !
00033 ! PSMILe internal parameters:
00034 ! ---------------------------
00035 !
00036 ! PRISM_root : Local rank of application root process
00037 ! PRISMdrv_root : Global rank of driver root process
00038 !
00039 ! PSMILe_Init_tag : Tag in order to transfer with the coupler the
00040 ! initial data.
00041 ! The tag is used in PRISM_enddef.
00042 ! The tags are used in within communcator "comm_psmile".
00043 !
00044 ! noDatatypes : Number of PRISM datatypes supported
00045 ! (cf. include file prism.inc)
00046 !
00047 ! max_name : Maximal length (number of characters) of a name
00048 ! max_dim : Maximal number of dimensions of a block
00049 !
00050 ! ndim_2d : Number of dimensions in a 2-dimensional grid
00051 ! ndim_3d : Number of dimensions in a 3-dimensional grid
00052 !
00053 ! len_cvs_string : Length of the character string in order to save
00054 ! the CVS Id within the object file.
00055 !
00056 ! .... Parameters used in PRISM_Enddef ()
00057 !
00058 ! nd_msgextra = Dimension of buffer "extra_msg"
00059 ! in order to send extra search requests.
00060 ! nd_msgsel = Dimension of receive buffer "msg_sel"
00061 ! in order to send/receive messages on
00062 ! selected nearest neighbour points.
00063 ! num_req_types = number of distinct message types handled by
00064 ! psmile_get_intersect and psmile_enddef_action
00065 ! nd_msgint = Dimension of send buffer msgint/msgreq.
00066 ! ind_msgint_tag = Index in integer send buffer msgint/msgreq
00067 ! where the relative tag is stored.
00068 ! ip_msgint_inter = Position-1 in integer send buffer msgint/msgreq
00069 ! where intersection is stored.
00070 !
00071 ! nd_extent_infos = Number of extent info's per grid extent
00072 ! = 1 : Local grid id (extent id)
00073 ! = 2 : PRISM Grid type
00074 ! = 3 : Transformation code
00075 ! = 4 : Global grid id
00076 !
00077 ! nd_field_list = Number of pieces of info per field
00078 ! = 1 : Method Id
00079 ! = 2 : Field Id
00080 ! = 3 : Mask Id
00081 ! = 4 : global_transi_id
00082 ! (id_trans_in, located in target process)
00083 ! = 5 : remote_transi_id
00084 ! (id_trans_out, located in source process)
00085 ! = 6 : conservative remapping required yes(1)/no(0)
00086 !
00087 ! Send buffer msgint/msgreq:
00088 ! See routines psmile_pack_msg_intersections and psmile_unpack_msg_intersections
00089 ! for more details on the content of these buffers.
00090 !
00091 ! Send buffer extra_msg:
00092 !
00093 ! extra_msg (1) = Type of request
00094 ! PSMILE_Trilinear : Search additional points for
00095 ! trilinear interpolation.
00096 ! extra_msg (2) = Datatype
00097 ! extra_msg (3) = Length of buffer "ibuf" containing the integer data.
00098 ! extra_msg (4) = Length of buffer "buf" containing the
00099 ! real/double precision data.
00100 ! extra_msg (5) = Global comp id of component
00101 ! extra_msg (6) = Global var id
00102 ! extra_msg (7) = Grid Type of sending grid
00103 ! (PRISM_Reglonlatvrt, ...)
00104 ! extra_msg (8) = Number of control volumes sent
00105 ! extra_msg (9) = Number of integer data items per control
00106 ! volume sent
00107 ! extra_msg (10) = Number of real/double data items per control
00108 ! volume sent
00109 ! extra_msg (11) = Is data on global offset available ?
00110 ! extra_msg (12) = I-Index of global offset (partition)
00111 ! extra_msg (13) = J-Index of global offset (partition)
00112 ! extra_msg (14) = K-Index of global offset (partition)
00113 !
00114 ! Send buffer msg_sel:
00115 !
00116 ! msg_sel (1) = Interpolation code
00117 ! msg_sel (2) = Number of entries in original compact list
00118 ! msg_sel (3) = Number of entries in new compact list
00119 ! msg_sel (4) = Send info index (of sending process)
00120 ! msg_sel (5) = Method id (in sending process)
00121 !
00122 integer, parameter :: PRISM_root = 0
00123 integer, save :: PRISMdrv_root = 0
00124
00125 integer, parameter :: PSMILe_Init_tag = 0
00126
00127 integer, parameter :: PSMILe_latest_protocol_version = 5
00128 integer, parameter :: noDatatypes = 9
00129 !
00130 integer, parameter :: max_name = 256
00131 !
00132 integer, parameter :: ndim_1d = 1
00133 integer, parameter :: ndim_2d = 2
00134 integer, parameter :: ndim_3d = 3
00135 integer, parameter :: max_dim = 5
00136 !
00137 integer, parameter :: len_cvs_string = 100
00138 !
00139 ! Start mode (equivalent to DRV_MPI1 and DRV_MPI2 in prismdrv.F90)
00140 !
00141 integer, parameter :: PSMILe_notspawn = 1
00142 integer, parameter :: PSMILe_spawn = 2
00143 !
00144 ! "Logical" flags
00145 !
00146 integer, parameter :: PSMILe_true = 1
00147 integer, parameter :: PSMILe_false = 0
00148 !
00149 ! Undefined values
00150 !
00151 integer, parameter :: PSMILe_undef = -280177
00152 real, parameter :: PSMILe_rundef = -280177.0
00153 double precision, parameter :: PSMILe_dundef = -280177.0
00154
00155 integer, parameter :: PSMILe_undef2 = -240266
00156 real, parameter :: PSMILe_rundef2 = -240266.0
00157 double precision, parameter :: PSMILe_dundef2 = -240266.0
00158 !
00159 ! General PSMILe datatype for floating point variables
00160 ! which are NOT dependent on variables/fields at the user interface
00161 ! Examples are the extents which are computed in PRISM_Enddef().
00162 ! Currently, these values are computed in Double Precision
00163 ! which corresponds to SELECTED_REAL_KIND(12,307) by the Fortran 90 Standard.
00164 !
00165 integer, parameter :: PSMILe_float_kind = &
00166 SELECTED_REAL_KIND(12,307)
00167 integer, parameter :: PSMILe_float_datatype = &
00168 MPI_DOUBLE_PRECISION
00169 ! integer, parameter :: PSMILe_int_kind = &
00170 ! SELECTED_INT_KIND(9)
00171 ! integer, parameter :: PSMILe_sglereal_kind = &
00172 ! SELECTED_REAL_KIND(6,37)
00173 ! integer, parameter :: PSMILe_dblereal_kind = &
00174 ! SELECTED_REAL_KIND(12,307)
00175 !
00176 ! PSMILe statuses
00177 !
00178 ! PSMILe_status_undefined: Undefined component information
00179 ! PSMILe_status_free : Free (i.e. unused) component information
00180 ! PSMILe_status_defined : Not commited component information
00181 ! PSMILe_status_commited : Commited component information
00182
00183 integer, parameter :: PSMILe_Status_undefined = -1
00184 integer, parameter :: PSMILe_Status_free = 0
00185 integer, parameter :: PSMILe_Status_defined = 1
00186 integer, parameter :: PSMILe_Status_commited = 2
00187 !
00188 ! PSMILe grid types
00189 !
00190 integer, parameter :: PSMILe_Grid_Unstruct = 1
00191 integer, parameter :: PSMILe_Grid_Block = 2
00192 integer, parameter :: PSMILe_positive_up = 1
00193 integer, parameter :: PSMILe_positive_down = 2
00194 !
00195 ! PSMILe method types
00196 !
00197 integer, parameter :: PSMILe_PointMethod = 1
00198 integer, parameter :: PSMILe_VectorPointMethod = 2
00199 integer, parameter :: PSMILe_SubgridMethod = 3
00200 !
00201 ! PSMILe mask types
00202 !
00203 integer, parameter :: PSMILe_PointMask = 11
00204 integer, parameter :: PSMILe_VectorMask = 22
00205 !
00206 ! Parameters used in PRISM_Enddef ()
00207 !
00208 Integer, Parameter :: nd_msgextra = 17
00209 Integer, Parameter :: nd_msgsel = 5
00210 Integer, Parameter :: num_req_types = 6
00211 !
00212 Integer, parameter :: ind_msgint_tag = 17
00213 Integer, parameter :: maxpart = 3 * 3 * 3
00214 Integer, parameter :: ip_msgint_inter = ind_msgint_tag
00215 Integer, parameter :: nd_msgint = ip_msgint_inter + &
00216 (2*ndim_3d + 2)*maxpart
00217 Integer, Parameter :: msgloc_size = 15
00218 Integer, Parameter :: nd_extent_infos = 4
00219 Integer, Parameter :: nd_field_list = 6
00220 !
00221 ! Units
00222 !
00223 integer, parameter :: PSMILe_meters = 3000
00224 integer, parameter :: PSMILe_bar = 3001
00225 integer, parameter :: PSMILe_millibar = 3002
00226 integer, parameter :: PSMILe_decibar = 3003
00227 integer, parameter :: PSMILe_atmosphere = 3004
00228 integer, parameter :: PSMILe_pascal = 3005
00229 integer, parameter :: PSMILe_hpa = 3006
00230 integer, parameter :: PSMILe_unitless = 3007
00231 integer, parameter :: PSMILe_degrees_east = 3008
00232 integer, parameter :: PSMILe_degrees_north = 3009
00233 !
00234 ! Grid volume type
00235 !
00236 integer, parameter :: PSMILe_voltype1 = 3032
00237 integer, parameter :: PSMILe_voltype2 = 3033
00238
00239 ! For transient variable type
00240 !
00241 integer, parameter :: PSMILe_single = 3500
00242 integer, parameter :: PSMILe_vector = 3501
00243 integer, parameter :: PSMILe_bundle = 3502
00244 integer, parameter :: PSMILe_bunvec = 3503
00245 !
00246 ! For transient method_type and reduction type for reduction_type
00247 !
00248 integer, parameter :: PSMIle_mean = 3530
00249 integer, parameter :: PSMIle_max = 3531
00250 integer, parameter :: PSMIle_min = 3532
00251 integer, parameter :: PSMIle_med = 3533
00252 integer, parameter :: PSMIle_variance = 3534
00253 integer, parameter :: PSMILe_integral = 3535
00254
00255 integer, parameter :: PSMIle_ave = 3536
00256 integer, parameter :: PSMIle_wgt_ave = 3537
00257 integer, parameter :: PSMIle_subgrid_ave = 3538
00258 !
00259 ! Destination or origin type in transient_in or transient_out
00260 !
00261 integer, parameter :: PSMILe_comp = 3800
00262 integer, parameter :: PSMILe_file = 3810
00263 ! integer, parameter :: PSMILe_combi = 3811
00264 !
00265 ! File formats
00266 !
00267 integer, parameter :: PSMILe_mpp_ascii = 3821
00268 integer, parameter :: PSMILe_mpp_ieee32 = 3822
00269 integer, parameter :: PSMILe_mpp_native = 3823
00270 integer, parameter :: PSMILe_mpp_netcdf = 3824
00271 !
00272 ! File iomode
00273 !
00274 integer, parameter :: PSMILe_iosingle = 3825
00275 integer, parameter :: PSMILe_parallel = 3826
00276 integer, parameter :: PSMILe_distributed = 3827
00277 !
00278 ! File pack modes
00279 !
00280 integer, parameter :: PSMILe_one = 1
00281 integer, parameter :: PSMILe_two = 2
00282 integer, parameter :: PSMILe_four = 4
00283 integer, parameter :: PSMILe_eight = 8
00284 !
00285 ! Transient exchange date type
00286 !
00287 integer, parameter :: PSMILe_period = 3540
00288 integer, parameter :: PSMILe_preciseday = 3541
00289 integer, parameter :: PSMILe_list = 3542
00290 integer, parameter :: PSMIle_beg = 3543
00291 integer, parameter :: PSMIle_end = 3544
00292 integer, parameter :: PSMIle_beg_and_end = 3545
00293 integer, parameter :: PSMIle_lastdayinmo = 3546
00294 integer, parameter :: PSMILe_once = 3547
00295 !
00296 ! Time operation type (ig_source_timeop, ig_target_timeop)
00297 !
00298 integer, parameter :: PSMILe_tave = 3600
00299 integer, parameter :: PSMILe_tacc = 3601
00300 integer, parameter :: PSMILe_tmin = 3602
00301 integer, parameter :: PSMILe_tmax = 3603
00302 integer, parameter :: PSMILe_time_nnghbr = 3604
00303 integer, parameter :: PSMILe_time_linear = 3605
00304 !
00305 ! Local operations
00306 !
00307 integer, parameter :: PSMILe_add = 3606
00308 integer, parameter :: PSMILe_mul = 3607
00309 !
00310 ! Scatter or gather operation (scat_gath)
00311 !
00312 integer, parameter :: PSMILe_scat = 3700
00313 integer, parameter :: PSMILe_gath = 3701
00314 !
00315 ! Bundle combine or masking type (bndl_combi_type or mask_type)
00316 !
00317 integer, parameter :: PSMILe_var_mask = 3610
00318 integer, parameter :: PSMILe_ext_mask = 3611
00319 !
00320 ! Interpolation type (interp_type)
00321 !
00322 integer, parameter :: PSMILe_3D = 3620
00323 integer, parameter :: PSMILe_2D1D = 3621
00324 integer, parameter :: PSMILe_1D1D1D = 3622
00325 !
00326 ! 3D interpolation methods (iga_interp_meth)
00327 !
00328 integer, parameter :: PSMILe_nnghbr3D = 3630
00329 integer, parameter :: PSMILe_conserv3D = 3631
00330 integer, parameter :: PSMILe_user3D = 3632
00331 integer, parameter :: PSMILe_trilinear = 3643
00332 integer, parameter :: PSMILe_gauswg3D = 3644
00333 !
00334 ! 2D interpolation type (iga_interp_meth)
00335 !
00336 integer, parameter :: PSMILe_nnghbr2D = 3633
00337 integer, parameter :: PSMILe_bilinear = 3634
00338 integer, parameter :: PSMILe_bicubic = 3635
00339 integer, parameter :: PSMILe_conserv2D = 3636
00340 integer, parameter :: PSMILe_user2D = 3637
00341 !
00342 ! 1D interpolation type (iga_interp_meth)
00343 !
00344 integer, parameter :: PSMILe_nnghbr1D = 3638
00345 integer, parameter :: PSMILe_linear = 3639
00346 integer, parameter :: PSMILe_cubic = 3640
00347 integer, parameter :: PSMILe_conserv1D = 3641
00348 integer, parameter :: PSMILe_user1D = 3642
00349 !
00350 integer, parameter :: PSMILe_none = -1
00351
00352 ! interpolation first argument
00353 !
00354 integer, parameter :: PSMILE_novalue = 3643
00355 integer, parameter :: PSMILE_tneighbour = 3644
00356 integer, parameter :: PSMILe_nneighbour = 3645
00357 integer, parameter :: PSMILe_vneighbour = 3646
00358 !
00359 ! interpolation third argument
00360 !
00361 integer, parameter :: PSMILe_first = 3651
00362 integer, parameter :: PSMILe_second = 3652
00363 integer, parameter :: PSMILe_third = 3653
00364 integer, parameter :: PSMILe_fourth = 3654
00365 integer, parameter :: PSMILe_approx = 3657
00366 integer, parameter :: PSMILe_precise = 3658
00367 !
00368 ! interpolation fourth argument
00369 !
00370 integer, parameter :: PSMIle_gradient = 3660
00371 integer, parameter :: PSMILe_sixteen = 3661
00372 integer, parameter :: PSMILe_norma3D = 3662
00373 integer, parameter :: PSMILe_normb3D = 3663
00374 integer, parameter :: PSMILe_normc3D = 3664
00375 integer, parameter :: PSMILe_fracarea = 3665
00376 integer, parameter :: PSMILe_destarea = 3666
00377 integer, parameter :: PSMILe_norma1D = 3668
00378 integer, parameter :: PSMILe_normb1D = 3669
00379 integer, parameter :: PSMILe_normc1D = 3670
00380 !
00381 ! For conservation (ig_conserv)
00382 !
00383 integer, parameter :: PSMILe_glob_conserv = 3675
00384 integer, parameter :: CONSERVTAG = 200
00385 !
00386 ! For operand (ig_operand)
00387 !
00388 integer, parameter :: PSMIle_sin = 3680
00389 integer, parameter :: PSMILe_cos = 3681
00390 integer, parameter :: PSMILe_log = 3682
00391 !
00392 ! For combination location (ig_location)
00393 !
00394 integer, parameter :: PSMILe_source = 3695
00395 integer, parameter :: PSMILe_target = 3696
00396 !
00397 ! For combination method (ig_combi_meth)
00398 !
00399 integer, parameter :: PSMIle_smooth = 3685
00400 integer, parameter :: PSMILe_raw = 3686
00401 !
00402 ! Persistent type
00403 !
00404 integer, parameter :: PSMILe_local = 3710
00405 integer, parameter :: PSMILe_global = 3711
00406 !
00407 ! Actions performed in the transformer
00408 !
00409 integer, parameter :: PSMILe_trans_Init = 4000
00410 integer, parameter :: PSMILe_trans_Finalize = 4001
00411 integer, parameter :: PSMILe_trans_Put = 4002
00412 integer, parameter :: PSMILe_trans_Get = 4003
00413 integer, parameter :: PSMILe_trans_Set_neighbors_info = 4004
00414 integer, parameter :: PSMILe_trans_Set_src_epio_info = 4005
00415 integer, parameter :: PSMILe_trans_Set_tgt_epio_info = 4006
00416 integer, parameter :: PSMILe_trans_Set_triple_links = 4007
00417 integer, parameter :: PSMILe_trans_Get_rank = 4008
00418 integer, parameter :: PSMILe_trans_Set_epio_trans = 4009
00419 integer, parameter :: PSMILe_trans_Finalize_trans = 4010
00420 integer, parameter :: PSMILe_trans_End_trans = 4011
00421 integer, parameter :: PSMILe_trans_set_src_process = 4012
00422 integer, parameter :: PSMILe_trans_Abort = 4013
00423 integer, parameter :: PSMILe_trans_Set_rank_trans = 4014
00424 !
00425 ! Parameters used for the transformer management
00426 !
00427 integer, parameter :: PSMILe_trans_Header_length = 11
00428 integer, parameter :: PSMILe_trans_Max_iter = 100
00429
00430 integer, parameter :: PSMILe_trans_unset = 4020
00431 integer, parameter :: PSMILe_trans_notbegun = 4021
00432 integer, parameter :: PSMILe_trans_notrequested = 4022
00433 integer, parameter :: PSMILe_trans_complete = 4023
00434 !
00435 ! Codes for global (extra) search messages:
00436 ! Note: PSMILe_Finalize_extra_search must be different from
00437 ! code for interpolation_methods such as
00438 ! "PSMILe_trilinear, PSMILe_bilinear, ..."
00439 !
00440 Integer, Parameter :: PSMILe_Finalize_extra_search = -1000
00441 !
00442 ! Message tags used in PSMILe_Enddef:
00443 ! The tags are used in within communcator "comm_psmile".
00444 !
00445 ! PSMILe_Enddef_tag = Tag used to exchange data within applications.
00446 ! REQTAG = Tag used to request the send of grid coordinates.
00447 ! GRDTAG = Tag used to send the grid coordinates.
00448 ! VARTAG = Tag used to send data on additional fields.
00449 ! EXTTAG = Tag used to request extra search of interpolation
00450 ! neighbours or to signal end of extra search.
00451 ! CELLTAG = Tag used to request extra search of cells
00452 ! or to signal end of extra search.
00453 !
00454 ! REXTTAG = Tag used to receive answer for extra search.
00455 ! SELTAG = Tag used to receive the selected points
00456 ! for lobal nearest neighbour search.
00457 ! LOCTAG = Tag used to return the locations found.
00458 ! (plus additional tags depending on number of
00459 ! intersections)
00460 ! DATATAG = Base Tag used to exchange the data on the fields.
00461 ! (plus additional field dependent parameters)
00462 ! HALOTAG = Tag used to exchange halo information in the routine
00463 ! psmile_get_halo_points
00464 !
00465 Integer, Parameter :: PSMILe_Enddef_tag = 100
00466 Integer, Parameter :: reqtag = 101
00467 Integer, Parameter :: grdtag = 102
00468 Integer, Parameter :: vartag = 103
00469 Integer, Parameter :: exttag = 104
00470 Integer, Parameter :: rexttag = 105
00471 Integer, Parameter :: seltag = 106
00472 Integer, Parameter :: celltag = 107
00473 !
00474 Integer, Parameter :: loctag = 110
00475 !
00476 Integer, Parameter :: datatag = 120
00477 !
00478 Integer, Parameter :: halotag = 130
00479
00480 ! ----------------------------------------------------------------------------
00481 !
00482 ! PSMILe internal global variables:
00483 ! ---------------------------------
00484 !
00485 ! ch_id : Character string containing the id of the process.
00486 ! The id has the form: "[global_rank] comp_name"
00487 !
00488 !
00489 ! comm_coupler : PSMILe internal communicator for communication
00490 ! with the coupler
00491 ! comm_trans : PSMILe internal communicator for communication
00492 ! with the transformer
00493 !
00494 ! comm_global : Communicator containing all processes
00495 !
00496 ! comm_psmile : Communicator containing all application processes
00497 ! i.e. all processes connected to the PSMILe library
00498 !
00499 ! coupler_rank : Rank in communicator "comm_coupler"
00500 ! global_rank : Rank in communicator "comm_global"
00501 ! psmile_rank : Rank in communicator "comm_psmile"
00502 ! trans_rank : Rank of the transformer in communicator "comm_trans"
00503 !
00504 ! psmile_size : Size of communicator "comm_psmile"
00505 !
00506 ! datatypes2MPI : Translation table from PRISM datatypes
00507 ! into MPI datatypes
00508 !
00509 ! Number_of_Fields_allocated : Length of the grid function vector
00510 ! Number_of_Grids_allocated : Length of the grid types vector
00511 ! Number_of_Methods_allocated: Length of the method types vector
00512 ! Number_of_cpls_allocated: Length of the cpl types vector
00513 ! Number_of_Userdefs_allocated : Length of userdef types vector
00514 !
00515 ! length_of_integer : Length of an integer variable in Bytes
00516 !
00517 ! noApplication : Number of PRISM applications.
00518 ! noComponents : Number of components for all applications.
00519 !
00520 ! MPI_was_initialized : Was MPI initialized by PRISM_Init ?
00521 ! = .false. : MPI was initialized by application
00522 ! program
00523 ! = .true. : MPI was initialized by PRISM_Init
00524 !
00525 ! protocol_version : Protocol version used for communication with coupler
00526 !
00527 ! PRISM_is_initialized : Was the PRISM environment initialized ?
00528 !
00529 ! TimeSteps : Time steps
00530 ! TimeSteps_info : Info to the time steps
00531 ! Number_of_Timesteps : Number of time steps where data has
00532 ! to be exchanged or to be written
00533 !
00534 ! all_comp_infos : Info's on all components to be coupled.
00535 ! Used in PRISM_Enddef ()
00536 ! Number_of_coll_comps : Total number of components to be coupled.
00537 ! Dimension of all_comp_infos (:).
00538 !
00539 ! comp_infos : Infos on the components (located on the actual process).
00540 ! The entries of "comp_info" are sorted by the
00541 ! global comp id.
00542 ! n_act_comp : Number of active components on the actual process.
00543 ! : Dimension of comp_infos(:).
00544 !
00545 ! name_coord
00546 !
00547 ! Important constants :
00548 ! ---------------------
00549 !
00550 ! real_pi : PI (real precision)
00551 ! real_pi2 : 2.0 * PI
00552 ! real_pih : PI / 2
00553 ! real_deg2rad : PI / 180
00554 ! ----------------------------------------------------------------------------
00555
00556 logical :: MPI_was_initialized = .false.
00557 logical :: PRISM_is_initialized = .false.
00558 logical :: PRISM_is_terminated = .false.
00559 logical :: PRISM_comp_init = .false.
00560
00561 integer, dimension(0:1) :: PRISM_Redirect
00562 integer :: PRISM_outputLevel = 1
00563 integer :: PRISM_noCompsPerProc = 0
00564 integer :: Number_of_Comps_allocated = 0
00565 integer :: Number_of_Masks_allocated = 0
00566 integer :: Number_of_Grids_allocated = 0
00567 integer :: Number_of_Methods_allocated = 0
00568 integer :: Number_of_Fields_allocated = 0
00569 integer :: Number_of_Cpls_allocated = 0
00570 integer :: Number_of_Userdefs_allocated = 0
00571 integer :: Number_of_Timesteps = 0
00572 integer :: Number_of_coll_comps = 0
00573 integer :: n_act_comp = 0
00574 integer :: noApplication = 0
00575 integer :: noComponents = 0
00576 integer :: noRanksets = 0
00577
00578 integer :: comm_coupler = MPI_COMM_NULL
00579 integer :: comm_trans = MPI_COMM_NULL
00580 integer :: comm_global = MPI_COMM_NULL
00581 integer :: comm_psmile = MPI_COMM_NULL
00582
00583 integer :: global_rank = -1
00584 integer :: coupler_rank = -1
00585 integer :: trans_rank = -1
00586 integer :: psmile_rank = -1
00587
00588 integer :: psmile_size = 0
00589
00590 integer :: protocol_version
00591 integer :: length_of_integer
00592
00593 integer :: datatype_enddef_comp
00594
00595 integer, parameter :: int64 = SELECTED_INT_KIND(14)
00596
00597 integer, dimension(1:NoDatatypes) :: datatypes2MPI
00598
00599 character(len=max_name) :: ch_id = '[?] undefined'
00600 character(len=3) :: name_coord (ndim_3d)
00601 !
00602 real :: real_pi, real_pi2, real_pih, real_deg2rad
00603 double precision :: dble_pi, dble_pi2, dble_pih, dble_deg2rad
00604 !
00605 ! shift of longitude range by +- 360 deg (psmile_overlap)
00606 !
00607 double precision :: shlon(0:2)
00608
00609 double precision, parameter :: zero = 0.0d0
00610 double precision, parameter :: one = 1.0d0
00611 double precision, parameter :: two = 2.0d0
00612 double precision, parameter :: three = 3.0d0
00613 double precision, parameter :: four = 4.0d0
00614 double precision, parameter :: half = 0.5d0
00615 double precision, parameter :: bignum = 1.0d20
00616 double precision, parameter :: tiny = 1.0d-14
00617 double precision, parameter :: baby = 1.1d-3
00618 double precision, parameter :: quart = 0.25d0
00619 double precision, parameter :: north_thresh = 1.45d0 ! threshold for coord transf.
00620 double precision, parameter :: south_thresh =-2.00d0 ! threshold for coord transf.
00621
00622 double precision, parameter :: def_init_val = 1.d36
00623
00624 data name_coord /'1st', '2nd', '3rd'/
00625