New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 1359 for trunk/NEMO/OPA_SRC – NEMO

Changeset 1359 for trunk/NEMO/OPA_SRC


Ignore:
Timestamp:
2009-03-31T14:36:28+02:00 (15 years ago)
Author:
smasson
Message:

first implementation of iom_put, see ticket:387

Location:
trunk/NEMO/OPA_SRC
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DIA/diawri.F90

    r1334 r1359  
    2727   USE in_out_manager  ! I/O manager 
    2828   USE diadimg         ! dimg direct access file format output 
     29   USE iom 
    2930   USE ioipsl 
    3031 
     
    411412         WRITE(numout,*) '~~~~~~ ' 
    412413      ENDIF 
     414       
     415!--------------------------------------------------------------------------- 
     416 
     417      CALL iom_put("votemper",tn) 
     418      CALL iom_put("vosaline",sn) 
     419      CALL iom_put("sosstsst",tn(:,:,1))   ! sea surface temperature 
     420      CALL iom_put("sosaline",sn(:,:,1))   ! sea surface salinity 
     421#if defined key_dynspg_rl 
     422      CALL iom_put("sobarstf",bsfn)   ! barotropic streamfunction 
     423#else 
     424      CALL iom_put("sossheig",sshn)   ! sea surface height 
     425#endif 
     426 
     427      CALL iom_put("sowaflup",emp )   ! upward water flux 
     428      CALL iom_put("sowaflcd",emps)   ! c/d water flux 
     429      zw2d(:,:) = emps(:,:) * sn(:,:,1) * tmask(:,:,1) 
     430      CALL iom_put("sosalflx",zw2d)   ! c/d salt flux 
     431      CALL iom_put("sohefldo",qns + qsr )   ! total heat flux 
     432      CALL iom_put("soshfldo",qsr)   ! solar heat flux 
     433      CALL iom_put("somxl010",hmlp)   ! mixed layer depth 
     434      CALL iom_put("somixhgt",hmld)   ! turbocline depth 
     435      CALL iom_put("soicecov",fr_i)   ! ice fraction  
     436#if ! defined key_coupled 
     437      CALL iom_put("sohefldp",qrp)   ! heat flux damping 
     438      CALL iom_put("sowafldp",erp)   ! freshwater flux damping 
     439      zw2d(:,:) = erp(:,:) * sn(:,:,1) * tmask(:,:,1) 
     440      CALL iom_put("sosafldp", zw2d)   ! salt flux damping 
     441#endif 
     442 
     443#if ( defined key_coupled && ! defined key_lim3 && ! defined key_lim2 )  
     444      CALL iom_put("sohefldp",qrp)   ! heat flux damping 
     445      CALL iom_put("sowafldp",erp)   ! freshwater flux damping 
     446         zw2d(:,:) = erp(:,:) * sn(:,:,1) * tmask(:,:,1) 
     447      CALL iom_put("sosafldp",zw2d)   ! salt flux damping 
     448#endif 
     449#if defined key_diaspr 
     450      CALL iom_put("sosurfps",gps)   ! surface pressure 
     451#endif 
     452         zw2d(:,:) = FLOAT( nmln(:,:) ) * tmask(:,:,1) 
     453      CALL iom_put("sobowlin",zw2d)   ! ??? 
     454 
     455#if defined key_diahth 
     456      CALL iom_put("sothedep",hth)   ! depth of the thermocline 
     457      CALL iom_put("so20chgt",hd20)   ! depth of the 20 isotherm 
     458      CALL iom_put("so28chgt",hd28)   ! depth of the 28 isotherm 
     459      CALL iom_put("sohtc300",htc3)   ! first 300m heaat content 
     460#endif 
     461 
     462#if defined key_coupled  
     463#  if defined key_lim3 
     464      Must be adapted for LIM3 
     465#  else 
     466      CALL iom_put("soicetem",tn_ice)   ! surf. ice temperature 
     467      CALL iom_put("soicealb",alb_ice)   ! ice albedo 
     468#  endif 
     469#endif 
     470         ! Write fields on U grid 
     471      CALL iom_put("vozocrtx",un)    ! i-current 
     472#if defined key_diaeiv 
     473      CALL iom_put("vozoeivu",u_eiv)    ! i-eiv current 
     474#endif 
     475      CALL iom_put("sozotaux",utau)   ! i-wind stress 
     476#if defined key_dynspg_rl 
     477      CALL lbc_lnk( spgu, 'U', -1. ) 
     478      CALL iom_put("sozospgx",spgu)   ! i-surf. press. grad. 
     479#endif 
     480 
     481         ! Write fields on V grid 
     482      CALL iom_put("vomecrty",vn)   ! j-current 
     483#if defined key_diaeiv 
     484      CALL iom_put("vomeeivv",v_eiv)   ! j-eiv current 
     485#endif 
     486      CALL iom_put("sometauy", vtau)   ! j-wind stress 
     487#if defined key_dynspg_rl 
     488      CALL lbc_lnk( spgv, 'V', -1. ) 
     489      CALL iom_put("somespgy",spgv)   ! j-surf. pressure grad. 
     490#endif 
     491 
     492         ! Write fields on W grid 
     493      CALL iom_put("vovecrtz",wn)    ! vert. current 
     494#   if defined key_diaeiv 
     495      CALL iom_put("voveeivw",w_eiv)    ! vert. eiv current 
     496#   endif 
     497      CALL iom_put("votkeavt",avt)    ! T vert. eddy diff. coef. 
     498      CALL iom_put("votkeevd",avt_evd)    ! T enhan. vert. eddy diff. coef. 
     499      CALL iom_put("votkeavm",avmu)    ! T vert. eddy visc. coef. 
     500      CALL iom_put("votkeevm",avmu_evd)    ! T enhan. vert. eddy visc. coef. 
     501      IF( lk_zdfddm ) THEN 
     502         CALL iom_put("voddmavs",fsavs(:,:,:) )    ! S vert. eddy diff. coef. 
     503      ENDIF 
     504#if defined key_traldf_c2d 
     505      CALL iom_put("soleahtw",ahtw)   ! lateral eddy diff. coef. 
     506# if defined key_traldf_eiv 
     507      CALL iom_put("soleaeiw",aeiw)   ! EIV coefficient at w-point 
     508# endif 
     509#endif 
     510!--------------------------------------------------------------------------- 
    413511 
    414512      ! Write fields on T grid 
  • trunk/NEMO/OPA_SRC/IOM/iom.F90

    r1341 r1359  
    2626   USE iom_rstdimg     ! restarts access direct format "dimg" style... 
    2727 
     28#if defined key_ioserver 
     29   USE mod_event_client 
     30# endif 
     31 
    2832   IMPLICIT NONE 
    2933   PUBLIC   !   must be public to be able to access iom_def through iom 
    3034    
    31    PUBLIC iom_open, iom_close, iom_varid, iom_get, iom_gettime, iom_rstput 
     35   PUBLIC iom_init, iom_open, iom_close, iom_setkt, iom_varid, iom_get, iom_gettime, iom_rstput, iom_put 
    3236 
    3337   PRIVATE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 
    3438   PRIVATE iom_g0d, iom_g1d, iom_g2d, iom_g3d, iom_get_123d 
     39   PRIVATE iom_p2d, iom_p3d 
     40#if defined key_ioserver 
     41   PRIVATE iom_init_chkcpp 
     42   PRIVATE set_grid 
     43# endif 
    3544 
    3645   INTERFACE iom_get 
     
    4049      MODULE PROCEDURE iom_rp0d, iom_rp1d, iom_rp2d, iom_rp3d 
    4150   END INTERFACE 
     51  INTERFACE iom_put 
     52     MODULE PROCEDURE iom_p2d, iom_p3d 
     53  END INTERFACE 
     54#if defined key_ioserver 
     55   INTERFACE iom_setkt 
     56      MODULE PROCEDURE event__set_timestep 
     57   END INTERFACE 
     58# endif 
    4259 
    4360   !!---------------------------------------------------------------------- 
     
    4865 
    4966CONTAINS 
     67 
     68   SUBROUTINE iom_init( pjulian ) 
     69      !!---------------------------------------------------------------------- 
     70      !!                     ***  ROUTINE   *** 
     71      !! 
     72      !! ** Purpose :    
     73      !! 
     74      !!---------------------------------------------------------------------- 
     75      REAL(wp), INTENT(in) ::  pjulian   !: julian day at nit000 = 0 
     76#if defined key_ioserver 
     77      !!---------------------------------------------------------------------- 
     78      ! read the xml file 
     79      CALL event__parse_xml_file( 'iodef.xml' )   ! <- to get from the nameliste (namrun)... 
     80 
     81      ! calendar parameters 
     82      CALL event__set_time_parameters( nit000 - 1, pjulian, rdt ) 
     83 
     84      ! horizontal grid definition 
     85      CALL set_grid( "grid_T", glamt, gphit ) 
     86      CALL set_grid( "grid_U", glamu, gphiu ) 
     87      CALL set_grid( "grid_V", glamv, gphiv ) 
     88      CALL set_grid( "grid_W", glamt, gphit ) 
     89 
     90      ! vertical grid definition 
     91      CALL event__set_vert_axis( "deptht", gdept_0 ) 
     92      CALL event__set_vert_axis( "depthu", gdept_0 ) 
     93      CALL event__set_vert_axis( "depthv", gdept_0 ) 
     94      CALL event__set_vert_axis( "depthw", gdepw_0 ) 
     95 
     96      ! consistency regarding CPP keys... 
     97      CALL iom_init_chkcpp 
     98 
     99      ! end file definition 
     100      CALL event__close_io_definition 
     101#endif 
     102 
     103   END SUBROUTINE iom_init 
     104 
    50105 
    51106   SUBROUTINE iom_open( cdname, kiomid, ldwrt, kdom, kiolib, ldstop, ldiof ) 
     
    92147      ! if iom_open is called for the first time: initialize iom_file(:)%nfid to 0 
    93148      ! (could be done when defining iom_file in f95 but not in f90) 
    94       IF( iom_init == 0 ) THEN 
     149      IF( iom_open_init == 0 ) THEN 
    95150         iom_file(:)%nfid = 0 
    96          iom_init = 1 
     151         iom_open_init = 1 
    97152      ENDIF 
    98153      ! do we read or write the file? 
     
    244299         i_s = 1 
    245300         i_e = jpmax_files 
     301#if defined key_ioserver 
     302         CALL event__stop_ioserver 
     303#endif 
    246304      ENDIF 
    247305 
     
    822880      ENDIF 
    823881   END SUBROUTINE iom_rp3d 
     882 
     883 
    824884   !!---------------------------------------------------------------------- 
     885   !!                   INTERFACE iom_rstput 
     886   !!---------------------------------------------------------------------- 
     887   SUBROUTINE iom_p2d( cdname, pfield2d ) 
     888      CHARACTER(LEN=*)            , INTENT(in) ::   cdname 
     889      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   pfield2d 
     890#if defined key_ioserver 
     891      CALL event__write_field2D( cdname, pfield2d(nldi:nlei, nldj:nlej) ) 
     892#endif 
     893   END SUBROUTINE iom_p2d 
     894 
     895   SUBROUTINE iom_p3d( cdname, pfield3d ) 
     896      CHARACTER(LEN=*)                , INTENT(in) ::   cdname 
     897      REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) ::   pfield3d 
     898#if defined key_ioserver 
     899      CALL event__write_field3D( cdname, pfield3d(nldi:nlei, nldj:nlej, :) ) 
     900#endif 
     901   END SUBROUTINE iom_p3d 
     902   !!---------------------------------------------------------------------- 
     903 
     904 
     905#if defined key_ioserver 
     906 
     907   SUBROUTINE set_grid( cdname, plon, plat ) 
     908      !!---------------------------------------------------------------------- 
     909      !!                     ***  ROUTINE   *** 
     910      !! 
     911      !! ** Purpose :    
     912      !! 
     913      !!---------------------------------------------------------------------- 
     914      CHARACTER(LEN=*)            , INTENT(in) ::   cdname 
     915      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   plon 
     916      REAL(wp), DIMENSION(jpi,jpj), INTENT(in) ::   plat 
     917 
     918      CALL event__set_grid_dimension( cdname, jpiglo, jpjglo) 
     919      CALL event__set_grid_domain( cdname, nlei-nldi+1, nlej-nldj+1, nimpp+nldi-1, njmpp+nldj-1, & 
     920         &                         plon(nldi:nlei, nldj:nlej), plat(nldi:nlei, nldj:nlej) ) 
     921      CALL event__set_grid_type_nemo( cdname ) 
     922 
     923   END SUBROUTINE set_grid 
     924 
     925 
     926   SUBROUTINE iom_init_chkcpp 
     927      !!--------------------------------------------------------------------- 
     928      !!                   ***  SUBROUTINE    *** 
     929      !! 
     930      !! ** Purpose :   
     931      !!--------------------------------------------------------------------- 
     932      USE zdfddm, ONLY :   lk_zdfddm      ! vertical  physics: double diffusion 
     933       
     934#if defined key_dynspg_rl 
     935      CALL event__disable_field( "sossheig" ) 
     936#else 
     937      CALL event__disable_field( "sobarstf" ) 
     938#endif 
     939 
     940      !!#if ! ( ! defined key_dynspg_rl && defined key_ice_lim) 
     941      !!        CALL disable_field( "iowaflup" ) 
     942      !!         CALL disable_field( "sowaflep" ) 
     943      !!#endif 
     944 
     945#if ! defined key_coupled 
     946      CALL event__enable_field( "sohefldp" ) 
     947      CALL event__enable_field( "sowafldp" ) 
     948      CALL event__enable_field( "sosafldp" ) 
     949#endif 
     950 
     951#if ( defined key_coupled && ! defined key_lim3 && ! defined key_lim2 )  
     952      CALL event__enable_field( "sohefldp" ) 
     953      CALL event__enable_field( "sowafldp" ) 
     954      CALL event__enable_field( "sosafldp" ) 
     955#endif 
     956 
     957#if ! defined key_diaspr 
     958      CALL event__disable_field( "sosurfps" ) 
     959#endif 
     960 
     961#if ! defined key_diahth 
     962      CALL event__disable_field( "sothedep" ) 
     963      CALL event__disable_field( "so20chgt" ) 
     964      CALL event__disable_field( "so28chgt" ) 
     965      CALL event__disable_field( "sohtc300" ) 
     966#endif 
     967 
     968#if defined key_coupled  
     969# if defined key_lim3 
     970      Must be adapted to LIM3 
     971# else 
     972      CALL event__enable_field( "soicetem" ) 
     973      CALL event__enable_field( "soicealb" ) 
     974# endif  
     975#endif  
     976 
     977#if ! defined key_diaeiv 
     978      CALL event__disable_field( "vozoeivu" ) 
     979      CALL event__disable_field( "vomeeivv" ) 
     980      CALL event__disable_field( "voveeivw" ) 
     981#endif 
     982 
     983#if ! defined key_dynspg_rl 
     984      CALL event__disable_field( "sozospgx" ) 
     985      CALL event__disable_field( "somespgy" ) 
     986#endif 
     987 
     988      IF( lk_zdfddm ) CALL event__enable_field( "voddmavs" ) 
     989 
     990#if ! defined key_traldf_c2d 
     991      CALL event__disable_field( "soleahtw" ) 
     992#endif 
     993 
     994#if ! defined key_traldf_eiv  
     995      CALL event__disable_field( "soleaeiw" ) 
     996#endif 
     997 
     998   END SUBROUTINE iom_init_chkcpp 
     999 
     1000#else 
     1001 
     1002   SUBROUTINE iom_setkt( kt ) 
     1003      INTEGER, INTENT(in   )::   kt  
     1004   END SUBROUTINE iom_setkt 
     1005 
     1006#endif 
    8251007 
    8261008 
  • trunk/NEMO/OPA_SRC/IOM/iom_def.F90

    r1152 r1359  
    4949 
    5050!$AGRIF_DO_NOT_TREAT 
    51    INTEGER, PUBLIC            ::   iom_init = 0        !: used to initialize iom_file(:)%nfid to 0 
     51   INTEGER, PUBLIC            ::   iom_open_init = 0   !: used to initialize iom_file(:)%nfid to 0 
    5252 
    5353   TYPE, PUBLIC ::   file_descriptor 
  • trunk/NEMO/OPA_SRC/daymod.F90

    r1213 r1359  
    3030   USE in_out_manager  ! I/O manager 
    3131   USE iom             !  
     32   USE ioipsl, ONLY :   ymds2ju        ! for calendar 
    3233   USE prtctl          ! Print control 
    3334   USE restart         !  
     
    4849   REAL(wp), PUBLIC ::   rsec_day    !: current time step counted in second since 00h of the current day 
    4950 
     51   REAL(wp), PUBLIC ::   fjulday     !: julian day  
    5052   REAL(wp), PUBLIC ::   adatrj      !: number of elapsed days since the begining of the run 
    5153   !                                 !: it is the accumulated duration of previous runs 
     
    101103      nday    =   ndastp - (nyear * 10000) - ( nmonth * 100 )  
    102104 
     105      CALL ymds2ju( nyear, nmonth, nday, 0.0, fjulday )  ! we assume that we start run at 00:00 
     106      fjulday = fjulday + 1.                             ! move back to the day at nit000 (and not at nit000 - 1) 
     107 
    103108      sec1jan000 = 0.e0 
    104109      CALL day_mth 
     
    207212      rsec_month = rsec_month + rdttra(1)                  
    208213      rsec_day   = rsec_day   + rdttra(1)                  
    209       adatrj = adatrj + rdttra(1) / rday 
     214      adatrj  = adatrj  + rdttra(1) / rday 
     215      fjulday = fjulday + rdttra(1) / rday 
    210216       
    211217      IF( rsec_day > rday ) THEN                        ! NEW day 
     
    300306            ! define ndastp and adatrj 
    301307            IF ( nrstdt == 2 ) THEN  
     308               ! read the parameters correspondting to nit000 - 1 (last time step of previous run) 
    302309               CALL iom_get( numror, 'ndastp', zndastp ) 
    303310               ndastp = NINT( zndastp ) 
    304311               CALL iom_get( numror, 'adatrj', adatrj  ) 
    305312            ELSE  
    306                ndastp = ndate0 - 1     ! ndate0 read in the namelist in dom_nam 
     313               ! parameters correspondting to nit000 - 1 (as we start the step loop with a call to day) 
     314               ndastp = ndate0 - 1     ! ndate0 read in the namelist in dom_nam, we assume that we start run at 00:00 
    307315               adatrj = ( REAL( nit000-1, wp ) * rdttra(1) ) / rday  
    308316               ! note this is wrong if time step has changed during run  
    309317            ENDIF 
    310318         ELSE 
    311             ndastp = ndate0 - 1        ! ndate0 read in the namelist in dom_nam 
     319            ! parameters correspondting to nit000 - 1 (as we start the step loop with a call to day) 
     320            ndastp = ndate0 - 1        ! ndate0 read in the namelist in dom_nam, we assume that we start run at 00:00 
    312321            adatrj = ( REAL( nit000-1, wp ) * rdttra(1) ) / rday  
    313322         ENDIF 
  • trunk/NEMO/OPA_SRC/lib_mpp.F90

    r1345 r1359  
    23642364      !!            08/04 :: R. Benshila, generalisation 
    23652365      !!--------------------------------------------------------------------- 
     2366#if defined key_ioserver 
     2367      USE io_interface 
     2368#endif 
    23662369      INTEGER                                 :: code, ierr 
    23672370      LOGICAL                                 :: mpi_was_called 
    23682371      !!--------------------------------------------------------------------- 
    23692372      ! 
     2373#if defined key_ioserver 
     2374      CALL init_ioserver(mpi_comm_opa,.TRUE.) 
     2375#else 
    23702376      CALL mpi_initialized( mpi_was_called, code )      ! MPI initialization 
    23712377      IF ( code /= MPI_SUCCESS ) THEN 
     
    23822388         ENDIF 
    23832389      ENDIF 
     2390#endif 
    23842391      ! 
    23852392      IF( nn_buffer > 0 ) THEN 
  • trunk/NEMO/OPA_SRC/opa.F90

    r1226 r1359  
    6868   USE step            ! OPA time-stepping                  (stp     routine) 
    6969#if defined key_oasis3 
    70    USE cpl_oasis3      ! OASIS3 coupling (to ECHAM5) 
     70   USE cpl_oasis3      ! OASIS3 coupling 
    7171#elif defined key_oasis4 
    72    USE cpl_oasis4      ! OASIS4 coupling (to ECHAM5) 
     72   USE cpl_oasis4      ! OASIS4 coupling (not working) 
    7373#endif 
    7474   USE dynspg_oce      ! Control choice of surface pressure gradient schemes 
     
    7979 
    8080   USE trcini          ! Initialization of the passive tracers 
     81   USE iom 
     82#if defined key_ioserver 
     83   USE io_interface 
     84#endif 
    8185 
    8286   IMPLICIT NONE 
     
    172176      !! 
    173177      !!---------------------------------------------------------------------- 
    174 #if defined key_oasis3 || defined key_oasis4 
     178#if defined key_oasis3 || defined key_oasis4 || defined key_ioserver 
    175179      INTEGER :: localComm 
    176180#endif 
     
    209213      call cpl_prism_init(localComm) 
    210214      ! Nodes selection 
     215      narea = mynode(localComm) 
     216#elif key_ioserver 
     217      CALL init_ioserver(localcomm, .FALSE.) 
    211218      narea = mynode(localComm) 
    212219#else 
     
    283290 
    284291#if defined key_top 
    285       CALL trc_ini                           ! Passive tracers 
     292      CALL trc_ini                          ! Passive tracers 
    286293#endif 
    287294 
    288295      CALL dia_ptr_init                     ! Poleward TRansports initialization 
     296 
     297      CALL iom_init( fjulday - adatrj )     ! iom_put initialization 
    289298 
    290299      !                                     ! =============== ! 
     
    437446      IF ( lk_mpp ) CALL mppsync 
    438447 
    439       ! 1. Unit close 
    440       ! ------------- 
    441  
    442448      CLOSE( numnam )           ! namelist 
    443449      CLOSE( numout )           ! standard model output file 
    444450 
    445451      IF(lwp) CLOSE( numstp )   ! time-step file 
    446       IF(lwp) CLOSE( numsol ) 
     452      IF(lwp) CLOSE( numsol )   ! solver file 
     453 
     454      CALL iom_close            ! close all input/output files 
    447455 
    448456   END SUBROUTINE opa_closefile 
  • trunk/NEMO/OPA_SRC/step.F90

    r1334 r1359  
    178178      CALL day( kstp )             ! Calendar 
    179179 
     180      CALL iom_setkt( kstp )       ! say to iom that we are at time step kstp 
     181       
    180182      CALL rst_opn( kstp )         ! Open the restart file 
    181183 
Note: See TracChangeset for help on using the changeset viewer.