Trabalhar com dados do CMIP5 pode ser um pouco confuso pois nem sempre eles apresentam estruturas iguais. No meu caso eu tenho um conjunto de arquivos de tres modelos (CanESM2, CSIRO e HadGEM2) do CMIP5 e estes dados estao dispostos em arquivos de 5-10 anos, ou seja, uma serie de 100 anos temos 10-20 arquivos.Para juntar todos os arquivos em um so eu utilizei o NCO (Netcdf Operator) atraves do comando ncrcat. O script abaixo ira juntar todos os arquivos, de cada modelo, em apenas um arquivo.#!/bin/bash########################################################## O nome dos meu arquivos tem a seguinte estrutura:# tos_Omon_CanESM2_esmHistorical_r1i1p1_199001-200012.nc# $var $modelos $xpt#########################################################dir_inp=( '/dados/data/ESM-PP/SST/Historical/' ) # Diretoriovar=( 'tos_Omon' ) # Variavelmodelos=( 'CanESM2' 'CSIRO' 'HadGEM2' ) # Pasta/Modelosxpt=( 'esmHistorical_r1i1p1' ) # Ensemble# loop para contar o numero de arquivos referente a cada modelofor mdl in ${modelos[@]}; do # numero de arquivos neste ensemble member num_arq=$( ls ${dir_inp}${var}_${mdl}_${xpt}*.nc | wc -w ) echo "" $mdl# se houver apenas um arquivo continue para o proximo loop if [ ${num_arq} -le 1 ]; then echo "Ha apenas um arquivo em" ${dir_inp}. continue fiecho "Existem" ${num_arq} "arquivos no" ${dir_inp}# Data inicial de cada arquivo (o nome do primeiro arquivo inclui a data inicial)yyyymm_in=$( ls ${dir_inp}${var}_${mdl}_${xpt}*.nc | sed -n '1p' | cut -d '_' -f 6 | cut -d '-' -f 1 )# Data final de cada arquivo ( o nome do ultimo arquivo inclui a data final)yyyymm_fi=$( ls ${dir_inp}${var}_${mdl}_${xpt}*.nc | sed -n "${fl_nbr}p" | cut -d '_' -f 6 | cut -d '-' -f 2 )echo $yyyymm_in, $yyyymm_fi## Juntando todos os arquivs em apenas um so arquivoncrcat -O ${dir_inp}${var}_${mdl}_${xpt}*.nc ${dir_inp}${var}_${xpt}_${mdl}_${yyyymm_in}-${yyyymm_fi}doneexit 0Este script calculou em primeiro lugar os pesos para cada celula da grade do modelo, antes de usar os pesos para realizar a interpolacao cubica da grade nativa para a nova grade regular. Eu segui as mesmas etapas para todos os meus arquivos e reuniu os comandos em um script que ira varrer todos os arquivos no diretorio definido. Os arquivos do CMIP5 estao em formato de Netcdf porem, o espacamento de grade destes arquivos sao diferentes. Portanto, para calcular uma grade retangular generica para todos os dados para poder comparar os arquivos e executar operacoes com matrizes a solucao foi utilizar o cdo para gerar esta grade retangular, com latitudes de -90 a 90 e longitude de 0 a 360. Para isto execute estes comandos:#/bin/shmodelos=( 'CanESM2' 'CSIRO' 'HadGEM2' ) # Pastas para cada modelodir_inp=( '/dados/data/ESM-PP/SST/Historical/$modelos/' )num_arq=$( ls ${dir_inp}*.nc | wc -w )echo " Foram encontrados " num_arq " no diretorio "modelos=$( ls *.nc )for model in ${models[@]}; doecho "Degradando o modelo: " $modelnome=$( ls $model | cut -d '.' -f 1 )cdo genbil,r360x180 ${dir_inp}${var}_${xpt}_${mdl}_${yyyymm_in}-${yyyymm_fi} ${dir_inp}${var}_wgts_${xpt}_${mdl}_${yyyymm_in}-${yyyymm_fi}cdo remap,r360x180,${dir_inp}${var}_wgts_${xpt}_${mdl}_${yyyymm_in}-${yyyymm_fi} ${dir_inp}${var}_${xpt}_${mdl}_${yyyymm_in}-${yyyymm_fi} ${dir_inp}${var}_regular_${xpt}_${mdl}_${yyyymm_in}-${yyyymm_fi}doneEm seguida, era preciso calcular as medias anuais de TSM em todos os arquivos, pois isso torna um pouco mais facil de usar comandos do CDO depois. Por isso, foi feito um loop sobre todos os arquivos (nova grade) calculando a media anual. Uma vez que todas as grades nativas sao diferentes, e alguns modelos tem valores fill_value ou mascaras isso pode gerar um problema quando voce for calcular o ensemble mean.