Changeset 4221 for dynamico_lmdz


Ignore:
Timestamp:
Jan 8, 2020, 1:39:06 AM (5 years ago)
Author:
dubos
Message:

simple_physics : introduced plugins for reading parameters

Location:
dynamico_lmdz/simple_physics/phyparam
Files:
2 added
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • dynamico_lmdz/simple_physics/phyparam/dynphy_lonlat/iniphysiq_mod.F90

    r4178 r4221  
    1313  USE dimphy, ONLY: init_dimphy
    1414  USE inigeomphy_mod, ONLY: inigeomphy
     15  USE iniphyparam_mod, ONLY : iniphyparam
    1516  USE mod_phys_lmdz_para, ONLY: klon_omp ! number of columns (on local omp grid)
    1617  USE infotrac, ONLY: nqtot, type_trac
  • dynamico_lmdz/simple_physics/phyparam/param/iniphyparam.F90

    r4220 r4221  
    1       SUBROUTINE iniphyparam(ngrid,nlayer,
    2      $           punjours,
    3      $           pdayref,ptimestep,
    4      $           prad,pg,pr,pcpp)
    5       use IOIPSL
    6       use getparam
    7       use dimphy
    8       USE mod_grid_phy_lmdz
    9       USE mod_phys_lmdz_para
    10       USE callkeys
    11       use comgeomfi
    12       USE geometry_mod, ONLY : longitude,latitude,cell_area
    13       USE phys_const, ONLY : planet_rad,g,r,cpp,rcp,dtphys,unjours,mugaz
    14       USE planet, ONLY : coefir, coefvis
    15       USE astronomy
    16       USE turbulence, ONLY : lmixmin, emin_turb
    17       USE surface
    18       IMPLICIT NONE
     1MODULE iniphyparam_mod
     2  IMPLICIT NONE
     3  PRIVATE
    194
    20 c
    21 c=======================================================================
    22 c
    23 c   subject:
    24 c   --------
    25 c
    26 c   Initialisation for the physical parametrisations of the LMD
    27 c   martian atmospheric general circulation modele.
    28 c
    29 c   author: Frederic Hourdin 15 / 10 /93
    30 c   -------
    31 c
    32 c   arguments:
    33 c   ----------
    34 c
    35 c   input:
    36 c   ------
    37 c
    38 c    ngrid                 Size of the horizontal grid.
    39 c                          All internal loops are performed on that grid.
    40 c    nlayer                Number of vertical layers.
    41 c    pdayref               Day of reference for the simulation
    42 c    firstcall             True at the first call
    43 c    lastcall              True at the last call
    44 c    pday                  Number of days counted from the North. Spring
    45 c                          equinoxe.
    46 c
    47 c=======================================================================
    48 c
    49 c-----------------------------------------------------------------------
    50 c   declarations:
    51 c   -------------
     5  REAL, PARAMETER :: perfect_gas_const = 8134.
    526
    53  
    54 #include "iniprint.h"
     7  PUBLIC :: iniphyparam
    558
     9CONTAINS
     10 
     11  SUBROUTINE iniphyparam(ngrid,nlayer, &
     12       &           punjours,              &
     13       &           pdayref,ptimestep,     &
     14       &           prad,pg,pr,pcpp)
     15    use getparam
     16    use dimphy
     17    USE mod_grid_phy_lmdz
     18    USE mod_phys_lmdz_para
     19    USE callkeys
     20    use comgeomfi
     21    USE geometry_mod, ONLY : longitude,latitude
     22    USE phys_const, ONLY : planet_rad,g,r,cpp,rcp,dtphys,unjours,mugaz
     23    USE planet, ONLY : coefir, coefvis
     24    USE astronomy
     25    USE turbulence, ONLY : lmixmin, emin_turb
     26    USE surface
     27    USE read_param_mod
     28    USE phyparam_plugins_lmdz
    5629
    57       REAL prad,pg,pr,pcpp,punjours
    58  
    59       INTEGER ngrid,nlayer
    60       REAL pdayref
    61  
    62       REAL ptimestep
    63  
    64       print*,'INIPHYPARAM'
     30    IMPLICIT NONE
     31   
     32    !    ngrid                 Size of the horizontal grid.
     33    !                          All internal loops are performed on that grid.
     34    !    nlayer                Number of vertical layers.
     35    !    pdayref               Day of reference for the simulation
     36    !    firstcall             True at the first call
     37    !    lastcall              True at the last call
     38    !    pday                  Number of days counted from the North. Spring
     39    !                          equinox
    6540
    66       CALL init_comgeomfi(klon_omp, klev, longitude, latitude)
     41    REAL prad,pg,pr,pcpp,punjours
     42   
     43    INTEGER ngrid, nlayer, pdayref
     44   
     45    REAL ptimestep
     46   
     47    print*,'INIPHYPARAM'
     48   
     49    read_paramr_plugin => read_paramr
     50    read_parami_plugin => read_parami
     51    read_paramb_plugin => read_paramb
    6752
    68       IF (klon.NE.klon_omp) THEN
    69          PRINT*,'STOP in iniphyparam'
    70          PRINT*,'Probleme de dimensions :'
    71          PRINT*,'klon     = ',klon
    72          PRINT*,'klon_omp   = ',klon_omp
    73          STOP
    74       ENDIF
    75 
    76       IF (nlayer.NE.nlayermx) THEN
    77          PRINT*,'STOP in iniphyparam'
    78          PRINT*,'Probleme de dimensions :'
    79          PRINT*,'nlayer     = ',nlayer
    80          PRINT*,'nlayermx   = ',nlayermx
    81          STOP
    82       ENDIF
    83 
    84       IF (ngrid.NE.klon_glo) THEN
    85          PRINT*,'STOP in iniphyparam'
    86          PRINT*,'Probleme de dimensions :'
    87          PRINT*,'ngrid     = ',ngrid
    88          PRINT*,'ngridmax   = ',klon_glo
    89         STOP
    90       ENDIF
    91 
    92       print*,'Avant les getpar '
    93       CALL getpar('unjours',86400.  ,unjours,'unjours')
    94       CALL getpar('planet_rad',6.4e6,planet_rad,'planet_rad')
    95       CALL getpar('g',9.8           ,g,'g')
    96       CALL getpar('cpp',1004.       ,cpp,'cpp')
    97       CALL getpar('mugaz',28.       ,mugaz,'mugaz')
    98       CALL getpar('year_day',360.   ,year_day,'year_day')
    99       CALL getpar('periheli',150.   ,periheli,'periheli')
    100       CALL getpar('aphelie',150.    ,aphelie,'aphelie')
    101       CALL getpar('peri_day',0.     ,peri_day,'peri_day')
    102       CALL getpar('obliquit',23.    ,obliquit,'obliquit')
    103       CALL getpar('Cd_mer',.01      ,Cd_mer,'Cd_mer')
    104       CALL getpar('Cd_ter',.01      ,Cd_ter,'Cd_ter')
    105       CALL getpar('I_mer',30000.    ,I_mer,'I_mer')
    106       CALL getpar('I_ter',30000.    ,I_ter,'I_ter')
    107       CALL getpar('alb_ter',.112    ,alb_ter,'alb_ter')
    108       CALL getpar('alb_mer',.112    ,alb_mer,'alb_mer')
    109       CALL getpar('emi_mer',1.      ,emi_mer,'emi_mer')
    110       CALL getpar('emi_mer',1.      ,emi_mer,'emi_mer')
    111       CALL getpar('emin_turb',1.e-16 ,emin_turb,'emin_turb')
    112       CALL getpar('lmixmin',100.    ,lmixmin,'lmixmin')
    113       CALL getpar('coefvis',.99     ,coefvis,'coefvis')
    114       CALL getpar('coefir',.08      ,coefir,'coefir')
    115 
    116 
    117       CALL getpar('callrad',.true.,callrad,'appel rayonnemen')
    118       CALL getpar('calldifv',.true.,calldifv,'appel difv')
    119       CALL getpar('calladj',.true.,calladj,'appel adj')
    120       CALL getpar('callcond',.true.,callcond,'appel cond')
    121       CALL getpar('callsoil',.true.,callsoil,'appel soil')
    122       CALL getpar('season',.true.,season,'appel soil')
    123       CALL getpar('diurnal',.false.,diurnal,'appel soil')
    124       CALL getpar('lverbose',.true.,lverbose,'appel soil')
    125       CALL getpar('period_sort',1.,period_sort,'period sorties en jour')
    126 
    127       write(lunout,*) 'unjours=',unjours
    128       write(lunout,*) 'planet_rad=',planet_rad
    129       write(lunout,*) 'g=',g
    130       write(lunout,*) 'cpp=',cpp
    131       write(lunout,*) 'mugaz=',mugaz
    132       write(lunout,*) 'year_day=',year_day
    133       write(lunout,*) 'periheli=',periheli
    134       write(lunout,*) 'aphelie=',aphelie
    135       write(lunout,*) 'peri_day=',peri_day
    136       write(lunout,*) 'obliquit=',obliquit
    137       write(lunout,*) 'Cd_mer=',Cd_mer
    138       write(lunout,*) 'Cd_ter=',Cd_ter
    139       write(lunout,*) 'I_mer=',I_mer
    140       write(lunout,*) 'I_ter=',I_ter
    141       write(lunout,*) 'alb_ter=',alb_ter
    142       write(lunout,*) 'alb_mer=',alb_mer
    143       write(lunout,*) 'emi_mer=',emi_mer
    144       write(lunout,*) 'emi_mer=',emi_mer
    145       write(lunout,*) 'emin_turb=',emin_turb
    146       write(lunout,*) 'lmixmin=',lmixmin
    147       write(lunout,*) 'coefvis=',coefvis
    148       write(lunout,*) 'coefir=',coefir
    149       write(lunout,*) 'callrad=',callrad
    150       write(lunout,*) 'calldifv=',calldifv
    151       write(lunout,*) 'calladj=',calladj
    152       write(lunout,*) 'callcond=',callcond
    153       write(lunout,*) 'callsoil=',callsoil
    154       write(lunout,*) 'season=',season
    155       write(lunout,*) 'diurnal=',diurnal
    156       write(lunout,*) 'lverbose=',lverbose
    157       write(lunout,*) 'period_sort=',period_sort
    158 
    159       print*,'Activation de la physique:'
    160       print*,' Rayonnement ',callrad
    161       print*,' Diffusion verticale turbulente ', calldifv
    162       print*,' Ajustement convectif ',calladj
    163       print*,' Sol ',callsoil
    164       print*,' Cycle diurne ',diurnal
    165 
    166 c   choice of the frequency of the computation of radiations
    167       IF(diurnal) THEN
    168          iradia=NINT(punjours/(20.*ptimestep))
    169       ELSE
    170          iradia=NINT(punjours/(4.*ptimestep))
    171       ENDIF
    172       iradia=1
    173       PRINT*,'unjours',punjours
    174       PRINT*,'The radiative transfer is computed each ',
    175      s   iradia,' physical time-step or each ',
    176      s   iradia*ptimestep,' seconds'
    177 c-----------------------------------------------------------------------
    178 
    179       print*,'latitude0  ohe',latitude(1:3),latitude(klon_omp)
    180       print*,'OK17 AAA'
    181 
    182       prad=planet_rad
    183       pg=g
    184       r=8.134/(mugaz*0.001)
    185       print*,'R=',r
    186       pr=r
    187       pcpp=cpp
    188       rcp=r/cpp
    189       dtphys=ptimestep
    190       punjours=unjours
    191 
    192       RETURN
    193 9999  STOP'Cette version demande les fichier rnatur.dat et surf.def'
    194       END
     53    CALL init_comgeomfi(klon_omp, klev, longitude, latitude)
     54   
     55    IF (klon.NE.klon_omp) THEN
     56       PRINT*,'STOP in iniphyparam'
     57       PRINT*,'Probleme de dimensions :'
     58       PRINT*,'klon     = ',klon
     59       PRINT*,'klon_omp   = ',klon_omp
     60       STOP
     61    ENDIF
     62   
     63    IF (nlayer.NE.nlayermx) THEN
     64       PRINT*,'STOP in iniphyparam'
     65       PRINT*,'Probleme de dimensions :'
     66       PRINT*,'nlayer     = ',nlayer
     67       PRINT*,'nlayermx   = ',nlayermx
     68       STOP
     69    ENDIF
     70   
     71    IF (ngrid.NE.klon_glo) THEN
     72       PRINT*,'STOP in iniphyparam'
     73       PRINT*,'Probleme de dimensions :'
     74       PRINT*,'ngrid     = ',ngrid
     75       PRINT*,'ngridmax   = ',klon_glo
     76       STOP
     77    ENDIF
     78   
     79    print*,'Avant les getpar '
     80    CALL read_param('unjours', 86400., unjours,'unjours')
     81    CALL read_param('planet_rad',6.4e6,planet_rad,'planet_rad')
     82    CALL read_param('g',9.8           ,g,'g')
     83    CALL read_param('cpp',1004.       ,cpp,'cpp')
     84    CALL read_param('mugaz',28.       ,mugaz,'mugaz')
     85    CALL read_param('year_day',360.   ,year_day,'year_day')
     86    CALL read_param('periheli',150.   ,periheli,'periheli')
     87    CALL read_param('aphelie',150.    ,aphelie,'aphelie')
     88    CALL read_param('peri_day',0.     ,peri_day,'peri_day')
     89    CALL read_param('obliquit',23.    ,obliquit,'obliquit')
     90    CALL read_param('Cd_mer',.01      ,Cd_mer,'Cd_mer')
     91    CALL read_param('Cd_ter',.01      ,Cd_ter,'Cd_ter')
     92    CALL read_param('I_mer',30000.    ,I_mer,'I_mer')
     93    CALL read_param('I_ter',30000.    ,I_ter,'I_ter')
     94    CALL read_param('alb_ter',.112    ,alb_ter,'alb_ter')
     95    CALL read_param('alb_mer',.112    ,alb_mer,'alb_mer')
     96    CALL read_param('emi_mer',1.      ,emi_mer,'emi_mer')
     97    CALL read_param('emi_mer',1.      ,emi_mer,'emi_mer')
     98    CALL read_param('emin_turb',1.e-16 ,emin_turb,'emin_turb')
     99    CALL read_param('lmixmin',100.    ,lmixmin,'lmixmin')
     100    CALL read_param('coefvis',.99     ,coefvis,'coefvis')
     101    CALL read_param('coefir',.08      ,coefir,'coefir')
     102   
     103    CALL read_param('callrad',.true.,callrad,'appel rayonnemen')
     104    CALL read_param('calldifv',.true.,calldifv,'appel difv')
     105    CALL read_param('calladj',.true.,calladj,'appel adj')
     106    CALL read_param('callcond',.true.,callcond,'appel cond')
     107    CALL read_param('callsoil',.true.,callsoil,'appel soil')
     108    CALL read_param('season',.true.,season,'appel soil')
     109    CALL read_param('diurnal',.false.,diurnal,'appel soil')
     110    CALL read_param('lverbose',.true.,lverbose,'appel soil')
     111    CALL read_param('period_sort',1.,period_sort,'period sorties en jour')
     112   
     113    print*,'Activation de la physique:'
     114    print*,' Rayonnement ',callrad
     115    print*,' Diffusion verticale turbulente ', calldifv
     116    print*,' Ajustement convectif ',calladj
     117    print*,' Sol ',callsoil
     118    print*,' Cycle diurne ',diurnal
     119   
     120    !   choice of the frequency of the computation of radiations
     121    IF(diurnal) THEN
     122       iradia=NINT(punjours/(20.*ptimestep))
     123    ELSE
     124       iradia=NINT(punjours/(4.*ptimestep))
     125    ENDIF
     126    iradia=1
     127    PRINT*,'unjours',punjours
     128    PRINT*,'The radiative transfer is computed each ', &
     129         &   iradia,' physical time-step or each ', &
     130         &   iradia*ptimestep,' seconds'
     131   
     132    !-----------------------------------------------------------------------
     133   
     134    print*,'latitude0  ohe',latitude(1:3),latitude(klon_omp)
     135    print*,'OK17 AAA'
     136   
     137    prad=planet_rad
     138    pg=g
     139    r=perfect_gas_const/mugaz
     140    print*,'R=',r
     141    pr=r
     142    pcpp=cpp
     143    rcp=r/cpp
     144    dtphys=ptimestep
     145    punjours=unjours
     146   
     147  END SUBROUTINE iniphyparam
     148 
     149END MODULE iniphyparam_mod
Note: See TracChangeset for help on using the changeset viewer.