Ignore:
Timestamp:
Apr 25, 2014, 7:58:33 PM (10 years ago)
Author:
fhourdin
Message:

Enrichissement des sorties pour le guidage
Enriched outputs for nudging

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/dyn3d/guide_mod.F90

    r2021 r2025  
    437437! Sauvegarde du guidage?
    438438    f_out=((MOD(itau,iguide_sav).EQ.0).AND.guide_sav) 
    439     IF (f_out) CALL guide_out("S",jjp1,1,ps)
     439    IF (f_out) CALL guide_out("SP",jjp1,1,ps)
    440440   
    441441    if (guide_u) then
     
    447447        if (guide_zon) CALL guide_zonave(1,jjp1,llm,f_add)
    448448        CALL guide_addfield(ip1jmp1,llm,f_add,alpha_u)
    449         IF (f_out) CALL guide_out("U",jjp1,llm,f_add/factt)
     449        IF (f_out) CALL guide_out("ua",jjp1,llm,(1.-tau)*ugui1+tau*ugui2)
     450        IF (f_out) CALL guide_out("u",jjp1,llm,ucov)
     451        IF (f_out) CALL guide_out("ucov",jjp1,llm,f_add/factt)
    450452        ucov=ucov+f_add
    451453    endif
     
    459461        if (guide_zon) CALL guide_zonave(2,jjp1,llm,f_add)
    460462        CALL guide_addfield(ip1jmp1,llm,f_add,alpha_T)
    461         IF (f_out) CALL guide_out("T",jjp1,llm,f_add/factt)
     463        IF (f_out) CALL guide_out("teta",jjp1,llm,f_add/factt)
    462464        teta=teta+f_add
    463465    endif
     
    471473        if (guide_zon) CALL guide_zonave(2,jjp1,1,f_add(1:ip1jmp1,1))
    472474        CALL guide_addfield(ip1jmp1,1,f_add(1:ip1jmp1,1),alpha_P)
    473         IF (f_out) CALL guide_out("P",jjp1,1,f_add(1:ip1jmp1,1)/factt)
     475        IF (f_out) CALL guide_out("ps",jjp1,1,f_add(1:ip1jmp1,1)/factt)
    474476        ps=ps+f_add(1:ip1jmp1,1)
    475477        CALL pression(ip1jmp1,ap,bp,ps,p)
     
    485487        if (guide_zon) CALL guide_zonave(2,jjp1,llm,f_add)
    486488        CALL guide_addfield(ip1jmp1,llm,f_add,alpha_Q)
    487         IF (f_out) CALL guide_out("Q",jjp1,llm,f_add/factt)
     489        IF (f_out) CALL guide_out("q",jjp1,llm,f_add/factt)
    488490        q=q+f_add
    489491    endif
     
    497499        if (guide_zon) CALL guide_zonave(2,jjm,llm,f_add(1:ip1jm,:))
    498500        CALL guide_addfield(ip1jm,llm,f_add(1:ip1jm,:),alpha_v)
    499         IF (f_out) CALL guide_out("V",jjm,llm,f_add(1:ip1jm,:)/factt)
     501        IF (f_out) CALL guide_out("v",jjm,llm,vcov)
     502        IF (f_out) CALL guide_out("va",jjm,llm,(1.-tau)*vgui1+tau*vgui2)
     503        IF (f_out) CALL guide_out("vcov",jjm,llm,f_add(1:ip1jm,:)/factt)
    500504        vcov=vcov+f_add(1:ip1jm,:)
    501505    endif
     
    15081512   
    15091513    ! Variables entree
    1510     CHARACTER, INTENT(IN)                          :: varname
     1514    CHARACTER*(*), INTENT(IN)                          :: varname
    15111515    INTEGER,   INTENT (IN)                         :: hsize,vsize
    15121516    REAL, DIMENSION (iip1,hsize,vsize), INTENT(IN) :: field
     
    15171521    INTEGER       :: nid, id_lonu, id_lonv, id_latu, id_latv, id_tim, id_lev
    15181522    INTEGER       :: vid_lonu,vid_lonv,vid_latu,vid_latv,vid_cu,vid_cv,vid_lev
     1523    INTEGER       :: vid_au,vid_av
    15191524    INTEGER, DIMENSION (3) :: dim3
    15201525    INTEGER, DIMENSION (4) :: dim4,count,start
    1521     INTEGER                :: ierr, varid
     1526    INTEGER                :: ierr, varid,l
     1527    REAL, DIMENSION (iip1,hsize,vsize) :: field2
    15221528
    15231529    print *,'Guide: output timestep',timestep,'var ',varname
     
    15431549        ierr=NF_DEF_VAR(nid,"LEVEL",NF_FLOAT,1,id_lev,vid_lev)
    15441550        ierr=NF_DEF_VAR(nid,"cu",NF_FLOAT,2,(/id_lonu,id_latu/),vid_cu)
     1551        ierr=NF_DEF_VAR(nid,"au",NF_FLOAT,2,(/id_lonu,id_latu/),vid_au)
    15451552        ierr=NF_DEF_VAR(nid,"cv",NF_FLOAT,2,(/id_lonv,id_latv/),vid_cv)
     1553        ierr=NF_DEF_VAR(nid,"av",NF_FLOAT,2,(/id_lonv,id_latv/),vid_av)
    15461554       
    15471555        ierr=NF_ENDDEF(nid)
     
    15561564        ierr = NF_PUT_VAR_DOUBLE(nid,vid_cu,cu)
    15571565        ierr = NF_PUT_VAR_DOUBLE(nid,vid_cv,cv)
     1566        ierr = NF_PUT_VAR_DOUBLE(nid,vid_au,alpha_u)
     1567        ierr = NF_PUT_VAR_DOUBLE(nid,vid_av,alpha_v)
    15581568#else
    15591569        ierr = NF_PUT_VAR_REAL(nid,vid_lonu,rlonu*180./pi)
     
    15641574        ierr = NF_PUT_VAR_REAL(nid,vid_cu,cu)
    15651575        ierr = NF_PUT_VAR_REAL(nid,vid_cv,cv)
     1576        ierr = NF_PUT_VAR_REAL(nid,vid_au,alpha_u)
     1577        ierr = NF_PUT_VAR_REAL(nid,vid_av,alpha_v)
    15661578#endif
    15671579! --------------------------------------------------------------------
     
    15801592        IF (guide_u) THEN
    15811593            dim4=(/id_lonu,id_latu,id_lev,id_tim/)
     1594            ierr = NF_DEF_VAR(nid,"u",NF_FLOAT,4,dim4,varid)
     1595            ierr = NF_DEF_VAR(nid,"ua",NF_FLOAT,4,dim4,varid)
    15821596            ierr = NF_DEF_VAR(nid,"ucov",NF_FLOAT,4,dim4,varid)
    15831597        ENDIF
     
    15851599        IF (guide_v) THEN
    15861600            dim4=(/id_lonv,id_latv,id_lev,id_tim/)
     1601            ierr = NF_DEF_VAR(nid,"v",NF_FLOAT,4,dim4,varid)
     1602            ierr = NF_DEF_VAR(nid,"va",NF_FLOAT,4,dim4,varid)
    15871603            ierr = NF_DEF_VAR(nid,"vcov",NF_FLOAT,4,dim4,varid)
    15881604        ENDIF
     
    16071623    ierr=NF_OPEN("guide_ins.nc",NF_WRITE,nid)
    16081624
     1625    IF (varname=="SP") timestep=timestep+1
     1626
     1627    ierr = NF_INQ_VARID(nid,varname,varid)
    16091628    SELECT CASE (varname)
    1610     CASE ("S")
    1611         timestep=timestep+1
    1612         ierr = NF_INQ_VARID(nid,"SP",varid)
     1629    CASE ("SP","ps")
    16131630        start=(/1,1,timestep,0/)
    16141631        count=(/iip1,jjp1,1,0/)
    1615 #ifdef NC_DOUBLE
    1616         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
    1617 #else
    1618         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
    1619 #endif
    1620     CASE ("P")
    1621         ierr = NF_INQ_VARID(nid,"ps",varid)
    1622         start=(/1,1,timestep,0/)
    1623         count=(/iip1,jjp1,1,0/)
    1624 #ifdef NC_DOUBLE
    1625         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
    1626 #else
    1627         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
    1628 #endif
    1629     CASE ("U")
    1630         ierr = NF_INQ_VARID(nid,"ucov",varid)
     1632    CASE ("v","va","vcov")
     1633        start=(/1,1,1,timestep/)
     1634        count=(/iip1,jjm,llm,1/)
     1635    CASE DEFAULT
    16311636        start=(/1,1,1,timestep/)
    16321637        count=(/iip1,jjp1,llm,1/)
     1638    END SELECT
     1639
     1640    SELECT CASE (varname)
     1641    CASE("u","ua")
     1642        DO l=1,llm ; field2(:,2:jjm,l)=field(:,2:jjm,l)/cu(:,2:jjm) ; ENDDO
     1643        field2(:,1,:)=0. ; field2(:,jjp1,:)=0.
     1644    CASE("v","va")
     1645        DO l=1,llm ; field2(:,:,l)=field(:,:,l)/cv(:,:) ; ENDDO
     1646    CASE DEFAULT
     1647        field2=field
     1648    END SELECT
     1649
     1650
    16331651#ifdef NC_DOUBLE
    1634         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
     1652    ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field2)
    16351653#else
    1636         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
     1654    ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field2)
    16371655#endif
    1638     CASE ("V")
    1639         ierr = NF_INQ_VARID(nid,"vcov",varid)
    1640         start=(/1,1,1,timestep/)
    1641         count=(/iip1,jjm,llm,1/)
    1642 #ifdef NC_DOUBLE
    1643         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
    1644 #else
    1645         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
    1646 #endif
    1647     CASE ("T")
    1648         ierr = NF_INQ_VARID(nid,"teta",varid)
    1649         start=(/1,1,1,timestep/)
    1650         count=(/iip1,jjp1,llm,1/)
    1651 #ifdef NC_DOUBLE
    1652         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
    1653 #else
    1654         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
    1655 #endif
    1656     CASE ("Q")
    1657         ierr = NF_INQ_VARID(nid,"q",varid)
    1658         start=(/1,1,1,timestep/)
    1659         count=(/iip1,jjp1,llm,1/)
    1660 #ifdef NC_DOUBLE
    1661         ierr = NF_PUT_VARA_DOUBLE(nid,varid,start,count,field)
    1662 #else
    1663         ierr = NF_PUT_VARA_REAL(nid,varid,start,count,field)
    1664 #endif
    1665     END SELECT
    1666  
     1656
    16671657    ierr = NF_CLOSE(nid)
    16681658
Note: See TracChangeset for help on using the changeset viewer.