Changeset 1529


Ignore:
Timestamp:
May 26, 2011, 5:17:33 PM (13 years ago)
Author:
Laurent Fairhead
Message:

Necessary modifications to use the model in an aquaplanet or terraplanet configuration


Modifications nécessaires pour l'utilisation du moèle en configuration aquaplanète
ou terraplanète

Dans la dynamique:
Changement pour le paramètre iflag_phys:

auparavant : 0 pas de physique, 1 phyique, 2 rappel
ici on ajoute iflag_phys>=100 pour les aqua et terra

Du coup, dans leapfrog.F et gcm.F on appelle la physique si
iflag_phys=1.or.iflag_phys>=100
Dans iniacademic, on initialise si iflag_phys>=2 au lieu de =2
Dans gcm.F, on appelle en plus iniaqua (sous une clef CPP_EARTH)
Dans iniacademic, on met ps=108080 pour les aqua et terra pour répondre
à une specification CFMIP.

Dans la physique:
On ajoute phyaqua.F qui contient :
iniaqua : initialise les startphy.nc et limit.nc pour la phyique
zenang_an : calcule un ensolleillement moyen sur l'année en fonction de

la latiude (A. Campoy).

profil_sst : qui calcule différents profils latitudinaux de SSTs.
writelim : écrit le fichier limit.nc

Dans physiq.F
On ajoute la possibilité d'appeller un calcul d'ensoleillement moyen
sur l'année quand solarlong0=1000.

Location:
LMDZ5/trunk/libf
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/dyn3d/gcm.F

    r1454 r1529  
    408408c   -------------------------------
    409409
    410       IF (call_iniphys.and.(iflag_phys.eq.1)) THEN
     410      IF (call_iniphys.and.(iflag_phys==1.or.iflag_phys>=100)) THEN
    411411         latfi(1)=rlatu(1)
    412412         lonfi(1)=0.
     
    459459#endif
    460460
     461#ifdef CPP_EARTH
     462! Create start file (startphy.nc) and boundary conditions (limit.nc)
     463! for the Earth verstion
     464       if (iflag_phys>=100) then
     465          call iniaqua(ngridmx,latfi,lonfi,iflag_phys)
     466       endif
     467#endif
     468
    461469!      if (planet_type.eq."earth") then
    462470! Write an Earth-format restart file
     471
    463472        CALL dynredem0("restart.nc", day_end, phis)
    464473!      endif
  • LMDZ5/trunk/libf/dyn3d/iniacademic.F90

    r1520 r1529  
    115115  endif
    116116
    117   academic_case: if (iflag_phys == 2) then
     117  academic_case: if (iflag_phys >= 2) then
    118118     ! initializations
    119119
     
    208208     IF (.NOT. read_start) THEN
    209209        ! surface pressure
    210         ps(:)=preff
     210        if (iflag_phys>2) then
     211           ps(:)=preff
     212        else
     213           ps(:)=101080.
     214        endif
    211215        ! ground geopotential
    212216        phis(:)=0.
  • LMDZ5/trunk/libf/dyn3d/leapfrog.F

    r1520 r1529  
    149149      logical ok_sync
    150150      parameter (ok_sync = .true.)
     151      logical physic
    151152
    152153      data callinigrads/.true./
     
    193194      itaufin   = nday*day_step
    194195      itaufinp1 = itaufin +1
    195      
    196 
    197196      itau = 0
     197      physic=.true.
     198      if (iflag_phys==0.or.iflag_phys==2) physic=.false.
     199
    198200c      iday = day_ini+itau/day_step
    199201c      time = REAL(itau-(iday-day_ini)*day_step)/day_step+time_0
     
    281283     s        apdiss = .TRUE.
    282284         IF( MOD(itau,iphysiq ).EQ.0.AND..NOT.forward
    283      s          .and. iflag_phys.EQ.1                 ) apphys = .TRUE.
     285     s          .and. physic                        ) apphys = .TRUE.
    284286      ELSE
    285287      ! Leapfrog/Matsuno time stepping
     
    287289         IF( MOD(itau+1,dissip_period).EQ.0 .AND. .NOT. forward )
    288290     s        apdiss = .TRUE.
    289          IF( MOD(itau+1,iphysiq).EQ.0.AND.iflag_phys.EQ.1) apphys=.TRUE.
     291         IF( MOD(itau+1,iphysiq).EQ.0.AND.physic       ) apphys=.TRUE.
    290292      END IF
    291293
  • LMDZ5/trunk/libf/phylmd/physiq.F

    r1527 r1529  
    18811881     &    write(lunout,*)'Longitude solaire ',zlongi,solarlong0,dist
    18821882
     1883
     1884!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     1885! Calcul de l'ensoleillement :
     1886! ============================
     1887! Pour une solarlong0=1000., on calcule un ensoleillement moyen sur
     1888! l'annee a partir d'une formule analytique.
     1889! Cet ensoleillement est symmétrique autour de l'équateur et
     1890! non nul aux poles.
     1891      IF (abs(solarlong0-1000.)<1.e-4) then
     1892         call zenang_an(cycle_diurne,jH_cur,rlat,rlon,rmu0,fract)
     1893      ELSE
    18831894!  Avec ou sans cycle diurne
    1884       IF (cycle_diurne) THEN
    1885         zdtime=dtime*REAL(radpas) ! pas de temps du rayonnement (s)
    1886         CALL zenang(zlongi,jH_cur,zdtime,rlat,rlon,rmu0,fract)
    1887       ELSE
    1888         CALL angle(zlongi, rlat, fract, rmu0)
     1895         IF (cycle_diurne) THEN
     1896           zdtime=dtime*REAL(radpas) ! pas de temps du rayonnement (s)
     1897           CALL zenang(zlongi,jH_cur,zdtime,rlat,rlon,rmu0,fract)
     1898         ELSE
     1899           CALL angle(zlongi, rlat, fract, rmu0)
     1900         ENDIF
    18891901      ENDIF
    18901902
Note: See TracChangeset for help on using the changeset viewer.