Escolar Documentos
Profissional Documentos
Cultura Documentos
Petrópolis
Setembro de 2016
Resumo
RESUMO...................................................................................................................................... 2
SUMÁRIO..................................................................................................................................... 3
1 INTRODUÇÃO......................................................................................................................... 4
7 BIBLIOGRAFIA...................................................................................................................... 27
Para permitir maior fluência ao leitor desse relatório, tem muita utilidade apresentar al-
guns conceitos sobre a catenária, e também organizar um vocabulário mínimo.
s = ls Tx
trecho riser
peso próprio
ww
s =0
trecho do duto assentado no solo
projeção horizontal
Se o TDP do riser está em =0, seu topo está em = . No modelo de catenária perfei-
ta mais simples, no intervalo entre =0 e = a única carga distribuída presente é o
peso próprio do duto na direção vertical (peso molhado e cheio de fluido).
Para manter o riser suspenso, é preciso pelo menos uma força vertical . Essa força
geralmente é a maior componente da força de tração em qualquer ponto no riser.
Se apenas há uma força vertical – sem componente horizontal – no topo, não se trata
de um caso real de catenária, mas sim de um riser vertical. Na catenária, há simulta-
neamente uma força horizontal , associada de uma maneira própria à projeção hori-
zontal , e que é a outra componente da tração de topo .
Os principais esforços que atuam sobre o riser são: tração no topo, pressão interna
, pressão externa e curvatura no entorno do touchdown point. Os dutos
são dimensionados para resistirem a esses carregamentos. Pressão interna e pres-
são externa são parâmetros de fácil definição, porque o primeiro é uma condição ope-
racional controlável e o segundo é a pressão hidrostática da lâmina d’água. A tração
do topo na catenária estática pode ser calculada, utilizando as fórmulas apresenta-
das adiante nesse relatório dentro da teoria de catenária, pela integração do peso dis-
tribuído.
A priori, há fundamentos teóricos que permitem inferir quais são os parâmetros candi-
datos para um estudo de sensibilidade da resposta estática do riser oceânico, que in-
cluem:
2. Peso próprio que inclui, além do peso de aço ou outro material estrutural da
parede do duto, os efeitos do peso de fluido interno e de empuxo, de forma que
é conveniente referir-se a ele como um peso “submerso” de um duto cheio.
5. Rigidez do solo .
Boa parte dos conhecimentos na mecânica de risers oceânicos foi obtida no curso de
Terminais e Dutos, do Prof. Anderson Barata, que foi cursado no segundo semestre de
2015. Os conhecimentos mais gerais sobre a formulação da catenária simples estão
incluídos no programa regular daquela matéria. Conhecimentos em resistência de ma-
teriais, materiais para engenharia e mecânica dos fluidos também foram importantes
para essa pesquisa de iniciação científica e foram ensinados de forma suficiente pelos
professores Grecci, Paulo Ferreira, Anderson Barata e outros. Porém, foi preciso
aprender modelagem de elementos finitos, linguagem de programa Python e softwares
de processamento numérico Scilab e de processamento estatístico R. Essas capacita-
ções não fizeram parte do curso de Engenharia de Petróleo, mas foi possível ganhá-
las a partir do apoio do orientador.
Uma descrição adicional dos elementos teóricos mais relevantes para a descrição da
catenária foi obtida da leitura do material do Prof. Aranha[2], da Escola Politécnica da
Universidade de São Paulo, que avança adiante para uma aproximação da resposta
dinâmica do riser, usando princípios de superposição modal.
Embora não faça parte do currículo formal das engenharias na UCP, a modelagem em
elementos finitos é também ensinada pelos professores Anderson Barata e Paulo Fer-
reira na UCP, em aulas voluntárias com periodicidade irregular, usando notas de aulas
próprias[5]. Entretanto, para o uso de programa de elementos finitos ABAQUS, foi pre-
ciso consulta a várias fontes (vídeos, documentação em PDF etc) na Internet. O ma-
nual do programa ABAQUS está disponível em vários sites na rede. Desde que a Uni-
versidade Católica de Petrópolis não possui uma licença para uso pleno ou acadêmico
do programa ABAQUS, foi necessário fazer o download de uma versão gratuita para
estudantes, limitada a 1000 nós, no site www.simulia.com/rhs .
Em uma parte do trabalho, o processamento numérico dos resultados foi efetuado
usando o software Scilab, que é um clone sem custo do pacote Matlab e pode ser en-
contrado em http://www.scilab.org/download/5.4.1 .
(1)
(2)
Se o peso molhado for constante para qualquer posição ao longo do riser, então a for-
mulação acima fica reduzida a:
(3)
(4)
A fim de permitir uma manipulação algébrica mais geral, considere as versões adimen-
sionais dos parâmetros supracitados, empregando como fator de adimensionaliza-
ção dos comprimentos e como fator de adimensionalização das forças. Por força
desse tratamento de adimensionalização, o comprimento de arco adimensionalizado
se estende de 0 até 1 e outras dimensões, pesos distribuídos componentes de tração
horizontal e vertical são dadas por:
, , , ,
, , (5)
(6)
(7)
As posições horizontal e vertical de cada ponto são calculadas pela integração das pe-
quenas projeções em x e em y, a partir da extremidade inferior em , na forma:
(8)
(9)
(10)
(11)
(12)
(13)
, , (14)
(15)
, (16)
1 A rigidez vertical do solo é dada pela reação do solo em unidades de força por compri-
mento para uma penetração do duto em unidades de comprimento.
• a rigidez axial do trecho assentado sobre o solo, que pode ser mais compla-
cente ou oferecer mais reação contra um deslocamento axial do duto que equi-
libre-o em condição de assentamento mais confortável.
A rigidez axial do trecho sobre o solo é aproximadamente dada pelo valor da rigi-
dez axial do duto dividido por um comprimento de duto assentado em que ainda
atua a tração. O peso do duto, a tração no TDP e o coeficiente de atrito já estão sendo
considerados no problema, logo esse comprimento de atrito no solo já está, de alguma
forma, contemplado na formulação. Mas a rigidez não está. Dessa forma, é pos-
sível substituir por , com pequena perda de representatividade.
(17)
Cabe observar que o último termo na expressão (17) é análogo à própria definição do
parâmetro através da formulação (4), mas a comprimento é usado ao invés
de . Portanto, entre um e outro existe uma relação que pode ser empregada
substitutivamente. Ademais, a curvatura máxima não depende de . Assim,
essa curvatura máxima pode ser reescrita:
(18)
No domínio de cada elemento, o método usa uma interpolação polinomial por interva-
los para determinar o equilíbrio dessa unidade, o que corresponde à minimização de
um funcional de erro sobre a energia de deformação ou medida de mesmo efeito. Por-
que essa determinação é baseada em uma função interpoladora que usualmente não
replica a lei física que governa o sistema real, o MEF raramente provê resultados exa-
tos, mas ele gera resultados suficientemente aproximados. O equilíbrio do elemento
depende de grandezas que precisam ser determinadas em locações internas chama-
das de nós, que pode servir também como pontos de interligação entre dois ou mais
elementos. As grandezas, calculadas nos nós, que permitem o menor erro das fun-
ções interpoladoras são as incógnitas que o MEF busca calcular.
(19)
(20)
(21)
(22)
(23)
A catalogação dos fenômenos e propriedades que precisam ser mantidas pode ser re-
sumida em alguns itens:
• O atrito com o solo no trecho assentado deve ser incorporado ao modelo, mes-
mo que usando um método simples como a Lei de Amonton-Coulomb.
• Os efeitos de torção ou flexão foram do plano não são relevantes e podem ser
descartados.
• A fim de chegar aonde o modelo de catenária não foi, o modelo deve promover
representação correta da relação momento fletor × curvatura no trecho junto ao
touchdown point (TDP), o que usualmente exige que as rotações nodais sejam
consideradas como graus de liberdade do problema.
• Para curvaturas pequenas (raios de curvamento maiores que 0,5 m), não é im-
portante o tratamento da redução da seção transversal causada pela sua ovali-
zação. Porém, essa simplificação deve ser rediscutida no caso de curvaturas
grandes.
Essas características sugerem o uso de um elemento de viga simples (viga de Euler)
bidimensional, com 3 graus de liberdade por nó, com uma formulação similar à mostra-
da na igualdade (20), com o cuidado de assegurar a existência de uma tração efetiva
para que os efeitos de rigidez geométrica se manifestem. O modelo é inerentemente
não-linear, embora as não-linearidades sejam geométricas e não de materiais. Uma
formulação de contato mais simples (lei de Amonton-Coulomb) pode ser adotada para
tratar a interação entre o duto e o solo.
A interação entre o duto e o solo deve se basear no uso de penalidades, e não do mé-
todo de multiplicadores de Lagrange aumentados. No primeiro caso, uma rigidez ele-
vada de penalidade é multiplicada às penetrações, criando uma força artificial de rea-
ção que impele os corpos em contato na direção de apartarem-se. Essa rigidez de pe-
nalidade pode ser não-linear, mas tal tipo de rigidez dificulta a garantia de convergên-
cia dos modelos numéricos. Por condição do problema, a rigidez de penalidade, a for-
ça de reação e a penetração do duto no solo têm – os três – sentido físico: a primeira
é rigidez vertical do próprio solo (ainda que ela possa estar linearizada), a segunda é a
ação e a reação da força vertical que o duto aplica sobre o solo.
As cargas externas de peso e empuxo são aplicadas como forças equivalentes distri-
buídas. Mesmo no tratamento analítico, a carga já era um “peso molhado distribuí-
do”, resultado da soma de peso próprio do duto e peso do fluido interno, deduzida do
empuxo hidrostático. Essas forças distribuídas são definidas na interface do software
de elementos finitos e transparentemente transferidas para os nós ou tratadas pela for-
mulação dos elementos.
Ao invés de aplicar uma carga vertical no topo para forçar a criação da catenária, uma
estratégia diferente foi tentada e mostrou assegurar uma maior garantia de convergên-
cia. Em um passo de carga inicial, o duto é assentado sobre o solo, fechando pares
de contato que impedem os movimentos de corpo rígido na direção vertical. Logo em
seguida, o peso é aplicado, conjuntamente à força horizontal . Apenas em segui-
da uma das extremidades do riser é erguida do solo, mediante controle de desloca-
mento.
Por causa da restrição supracitada, várias tentativas para uma malha suficientemente
boa foram feitas. A recomendação mais convencional é que ela seja mais refinada na
vizinhança de regiões com maior gradiente dos deslocamentos ou de seus derivados
(deformações, curvaturas, tensões etc). Porém, ao longo do erguimento da extremida-
de de topo, a região de curvatura máxima e o touchdown point (TDP) se deslocam
desde o topo da coluna, no início da simulação, até sua posição final no fim da simula-
ção. A maioria dos elementos, então, é distribuída ao longo dessa região passível de
estar no touchdown point e, por exclusão, um pequeno número de elementos é coloca-
do no trecho que jamais se afasta do solo para completar o número de 1000 nós per-
mitidos pela versão do ABAQUS para estudantes.
Cabe lembrar que este bolsista não dispunha de conhecimentos em modelagem nu-
mérica usando o método de elementos finitos antes do trabalho de iniciação científica.
[1] CUSTÓDIO, A.B., Notas de aula do curso de Terminais e Dutos, Universidade Ca-
tólica de Petrópolis, fevereiro de 2012.
[2] ARANHA, J.A.P., Alguns aspectos conceituais no projeto de risers flexíveis e rígi-
dos, Departamento de Engenharia Naval e Oceânica – EPUSP, fevereiro de 1999.
[4] CUSTÓDIO, A.B., Notas de aula do curso de Mecânica dos Fluidos, Universidade
Católica de Petrópolis, fevereiro de 2012.
[5] CUSTÓDIO, A.B., Notas de aula do curso de Elementos Finitos para Engenharia
Submarina, Universidade PETROBRAS, setembro de 2014.
[6] ZIENKIEWICZ, O.C., TAYLOR, R.L., The Finite Element Method - Volume 1: The
Basis, 5th ed., Butterworth-Heinemann, 2000, ISBN 0-7506-5049-4.
[7] COOK, R.D., Finite Element Modeling for Stress Analysis, John Wiley & Sons Inc,
1995, ISBN 0-471-10774-3.
[8] CRISFIELD, M.A., Non-Linear Finite Element Analysis of Solids and Structures, Vo-
lume 1: Essentials, John Wiley & Sons, 1991, ISBN 0-471-92956-5.
Anexo I – Modelo em elementos finitos no programa ABAQUS
Anexo II – Script em Python para análise paramétrica.
Anexo III – Resultados de simulação tabelados.
Anexo IV – Resultados de pós-processamento usando o
software R
executeOnCaeStartup()
E=200000000000.0
L=4000.0
X0=(-L/2.0, 0.0)
X1=(L/2.0, 0.0)
numElems=2000
##
#
Ls=L*2.0
X0s=(-Ls/2,0.0)
X1s=(Ls/2,0.0)
gama_aco=7860.0
gama_a=1025.0
g1=-9.81
writePath = os.path.join(os.getenv('HOMEDRIVE'),os.getenv('HOMEPATH'),'My
Documents','engenharia','UCP','TCC','TDP')
os.chdir(writePath)
Cases=[];
for De in (0.1, 0.15,):
for D_t in (20.0,10.0):
for f_atr in ( 0.0100,0.05):
for LDA in (500.0, 1600.0):
for AngT in (0.14,0.18, 0.25, 0.2):
for Cstiff_ft in (0.1,40.0): #angulo topo
Cases.append((De, De/D_t, f_atr, LDA, AngT, Cstiff_ft))
pass
pass
pass
pass
pass
pass
nCases= len(Cases)
print " Numero de casos executados : %d\n"%(nCases,)
for i in range(0,2**5*4):
z1 = random.randrange(0,nCases)
dum0 = Cases[z1]
random.seed()
z2 = random.randrange(0,nCases)
Cases[z1] = Cases[z2]
Cases[z2] = dum0
pass
fout = open('TDP_TCC_datebase_Edgar.dat','a+')
##
fout.write( '%15s %15s %15s %15s %15s %15s %15s %15s %15s %15s %15s %15s %15s
%15s %15s %15s %15s %15s %15s %15s %15s %15s %15s\n'%('timeStep','EA','EI','LDA',\
'anguloTopo','TracaoH','TracaoV','TracaoTopo','PesoLinha','CurvMax','TracaoTDP','Rigidez-
Solo','Kmax*Ad_k', '-SF1/Pe/Ad_k',\
'-Ksolo*Ad_k/Pe','-SF1_topo/Pe/Ad_k',' -Ty/Pe/Ad_k','Lsusp','De','f_atr','td','TracaoC','-
SF2/Pe/Ad_k' ) )
for i in range(0,nCases):
if os.path.exists('STOP') or os.path.exists('STOP.txt'):
continue
dum0=Cases[i]
(De, td, f_atr, LDA, AngT, Cstiff_ft)=dum0[0:6]
tanA_T=tan(AngT)
print " o valor do angulo de topo corrente: %g\n\n"%(tanA_T,)
print " O valor do diametro externo: %g\n\n"%(De,)
print " O valor da espessura noloop: %g\n"%(td,)
print " O valor da LDA no loop: %g\n\n"%(LDA,)
Lsusp=LDA/(sqrt(1+tanA_T*tanA_T)-tanA_T)
Di=De-(2*td)
A=pi*((De**2)-(Di**2))/4.0
EA=E*A
Paco = gama_aco*9.81*A
Pagua = gama_a*9.81*(pi*Di*Di/4.0)
Psecototal = Paco + Pagua
Empuxo = gama_a*9.81*(pi*De*De/4.0)
Pe=-Psecototal+Empuxo
Ksolo=(EA/1.0E+05)*L/numElems*Cstiff_ft
print"Valor da regidez do solo : %g\n\n"%(Ksolo,)
Tx=-Lsusp*Pe*tanA_T
print "valor do Peso da linha: %g\n\n"%(Pe,)
print "valor da Tracao horizontal: %g\n\n"%(Tx,)
LatritoSolo = Tx/(-Pe)/f_atr
print "Comprimento de atrito com solo:%g\n"%(LatritoSolo,)
##
##
Mdb()
Model2=mdb.models['Model-1']
Model2.ConstrainedSketch(name='__profile__', sheetSize=Ls)
Model2.sketches['__profile__'].Line(point1=(-L/2-LatritoSolo, 0.0),point2=(L/2, 0.0))
Model2.sketches['__profile__'].HorizontalConstraint( \
addUndoState=False, entity=Model2.sketches['__profile__'].geometry[2])
Pduto = Model2.Part(dimensionality=TWO_D_PLANAR, \
name='duto', type=DEFORMABLE_BODY)
Pduto.BaseWire(sketch= Model2.sketches['__profile__'])
session.viewports['Viewport: 1'].setValues(displayedObject=Pduto)
del Model2.sketches['__profile__']
Model2.ConstrainedSketch(name='__profile__', sheetSize=40.0)
Model2.sketches['__profile__'].Line(point1=(-Ls/2-LatritoSolo, 0.0), \
point2=(Ls/2, 0.0))
Model2.sketches['__profile__'].HorizontalConstraint(\
addUndoState=False, entity=Model2.sketches['__profile__'].geometry[2])
Psolo = Model2.Part(dimensionality=TWO_D_PLANAR, name='solo', type=\
ANALYTIC_RIGID_SURFACE)
Psolo.AnalyticRigidSurf2DPlanar(sketch=Model2.sketches['__profile__'])
session.viewports['Viewport: 1'].setValues(displayedObject=Psolo)
Psolo = Model2.parts['solo']
del Model2.sketches['__profile__']
Model2.Material(name='Steel')
Model2.materials['Steel'].Elastic(table=((E, 0.3), ))
Pduto = Model2.parts['duto']
Pduto.assignBeamSectionOrientation(region=region, method=N1_COSINES, n1=(0.0,
0.0,-1.0))
a = Model2.rootAssembly
a = Model2.rootAssembly
a.DatumCsysByDefault(CARTESIAN)
edges1 = Pduto.edges.findAt(((0,0,0),),)
Pduto.PartitionEdgeByParam(edges=edges1, parameter=0.50)
Psolo= Model2.parts['solo']
a.Instance(name='solo-1', part=Psolo, dependent=ON)
a = Model2.rootAssembly
Pduto = Model2.parts['duto']
a.Instance(name='duto-1', part=Pduto, dependent=ON)
import allAbaqusMacros
allAbaqusMacros.Step()
Model2.steps['Weight'].setValues(initialInc=0.001)
Model2.steps['Force'].setValues(initialInc=0.001)
Model2.steps['Rising'].setValues(initialInc=0.001)
Model2.steps['Weight'].control.setValues(allowPropagation=OFF,
resetDefaultValues=OFF, timeIncrementation=(4.0, 8.0, 9.0, 16.0, 10.0, 4.0,
12.0, 5.0, 6.0, 3.0, 50.0, 0.25, 0.5, 0.75, 0.85, 0.25, 0.25, 3.0, 0.75))
Model2.steps['Weight'].control.setValues(timeIncrementation=(
4.0, 8.0, 9.0, 16.0, 10.0, 4.0, 12.0, 5.0, 6.0, 3.0, 50.0, 0.25, 0.5, 0.75,
0.85, 0.25, 0.25, 3.0, 0.75, 0.8, 3.0, 1.25, 2.0, 1.0, 0.1, 1.0, 0.95, 1.0))
InstDuto1 = Model2.rootAssembly.Instance(dependent=ON, name='duto-1', part=Pduto)
InstSolo = Model2.rootAssembly.Instance(dependent=ON, name='solo-1', part=Psolo)
Model2.ContactProperty('Int-Cont-Solo-duto')
Model2.interactionProperties['Int-Cont-Solo-duto'].NormalBehavior(\
pressureOverclosure=EXPONENTIAL, table=((1000.0, 0.0), (0.0, 0.1)),
maxStiffness=None, constraintEnforcementMethod=DEFAULT)
session.viewports['Viewport: 1'].assemblyDisplay.setValues(step='Initial')
Model2.ContactProperty('IntProp-1')
Model2.interactionProperties['IntProp-1'].TangentialBehavior(\
formulation=PENALTY, directionality=ISOTROPIC, slipRateDependency=OFF,
pressureDependency=OFF, temperatureDependency=OFF, dependencies=0,
table=((\
f_atr, ), ), shearStressLimit=None, maximumElasticSlip=FRACTION,
fraction=0.001, elasticSlipStiffness=None)
##
Model2.rootAssembly.Surface(side2Edges=InstDuto1.edges, name='Surf-duto')
Model2.SurfaceToSurfaceContactStd(adjustMethod=NONE, \
clearanceRegion=None, createStepName='Initial', \
datumAxis=None, \
initialClearance=OMIT, interactionProperty='Int-Cont-Solo-duto', \
slave=Model2.rootAssembly.surfaces['Surf-duto'], \
name='Int-Cont-Solo-duto', \
master=Region(side1Edges=InstSolo.edges), \
sliding=FINITE, thickness=ON)
edges1 = Region(edges=InstDuto1.edges)
Model2.FieldOutputRequest(createStepName='Rising', name='FOutput-2-1', \
rebar=EXCLUDE, region=edges1, sectionPoints=DEFAULT, \
variables=('U','SF','SE','CF','CDISP','COORD') )
Model2.rootAssembly.Set(edges=InstDuto1.edges, name='Set-duto-ALL-1')
edges1 = InstDuto1.edges.findAt(((0.1-L/2.0,0,0),),)
Model2.HistoryOutputRequest(createStepName='Rising', name='HOutput-2-1',\
region=Model2.rootAssembly.sets['Set-duto-ALL-1'], \
sectionPoints=DEFAULT, variables=('SK1','SF1','SM1'))
a = InstSolo.referencePoints[InstSolo.referencePoints.keys()[0]]
Model2.EncastreBC(createStepName='Initial', localCsys=None, \
name='RP', region=Region(referencePoints=((a,),)))
a = Region(edges=InstDuto1.edges)
Model2.LineLoad(name='Load-Peso-Molhado', createStepName='Weight', region=a,
comp2=Pe)
##
a = Model2.rootAssembly
v1 =InstDuto1.vertices
verts1 = v1.findAt(((-L/2-LatritoSolo,0.0,0.0),))
region = a.Set(vertices=verts1, name='Set-4')
Model2.EncastreBC(name='BC-eng_duto', createStepName='Initial', \
region=region, localCsys=None)
a = Model2.rootAssembly
v1 = InstDuto1.vertices
verts1 = v1.findAt(((L/2,0.0,0.0),))
region = a.Set(vertices=verts1, name='Set-5')
Model2.DisplacementBC(name='BC-Elevacao', createStepName='Rising',
region=region, u1=UNSET, u2=LDA, ur3=UNSET, amplitude=UNSET,
distributionType=UNIFORM, fieldName='', localCsys=None)
##
a = Model2.rootAssembly
v1 =InstDuto1.vertices
verts1 = v1.findAt(((L/2,0.0,0.0),))
region = a.Set(vertices=verts1, name='Set-2')
Model2.ConcentratedForce(name='Load-Tracao_H', createStepName='Force', region=re-
gion,
cf1=Tx, distributionType=UNIFORM, field='', localCsys=None)
edges1 = Pduto.edges.findAt(((-L/2-LatritoSolo,0,0),))
Pduto.seedEdgeByNumber(constraint=FINER, edges=edges1,
number=int(numElems*(0.3)))
##
edges2 = Pduto.edges.findAt(((L/2,0,0),))
Pduto.seedEdgeByNumber(constraint=FINER, edges=edges2,
number=int(numElems*(0.7)))
#
Pduto.generateMesh()
###
Model2.rootAssembly.regenerate()
try:
mdb.jobs['Job-er1'].submit(consistencyChecking=OFF)
mdb.jobs['Job-er1'].waitForCompletion()
time.sleep(40)
except:
print "Houve um erro na execucao do job em ", time.strftime("%a, %d %b %Y %H:%M:
%S +0000", time.gmtime())
try:
myOdb = session.openOdb(name="Job-er1.odb")
rootAssembly = myOdb.rootAssembly
beamData = rootAssembly.elementSets[' ALL ELEMENTS'.upper()]
nodeData = rootAssembly.nodeSets[' ALL NODES'.upper()]
stepOut = myOdb.steps['Rising']
for fr1 in stepOut.frames:
timeStep = fr1.frameValue
kset = fr1.fieldOutputs['SK'].getSubset(region=beamData).values
kset = map(lambda x:abs(x.data[0]), kset)
kmax = max(kset)
ikmax = kset.index(kmax)
Frc = fr1.fieldOutputs['SF'].getSubset(region=beamData).values
SF1= Frc[ikmax-8].data[0]
SF1_topo = Frc[-1].data[0]
SF2 = Frc[-1].data[1]
Ty = sqrt(SF1_topo**2-Tx**2)
sinAt = SF1/SF1_topo
At = math.asin(sinAt)*53.7
if Pe<>0.0:
Ad_k=pow(-EI/Pe,1.0/3.0)
fout.write( '%15g %15g %15g %15g %15g %15g %15g %15g %15g %15g %15g
%15g %15g %15g %15g %15g %15g %15g %15g %15g %15g %15g %15g\n'%
(timeStep,EA,EI,LDA,\
At,Tx,Ty,SF1_topo, Pe,kmax,SF1,Ksolo,kmax*Ad_k,-SF1/Pe/Ad_k,-
Ksolo*Ad_k/Pe,-SF1_topo/Pe/Ad_k,\
-Ty/Pe/Ad_k,Lsusp,De,f_atr,td,SF2,-SF2/Pe/Ad_k) )
fout.flush()
pass
except:
print "Nao conseguiu ler o odb do job em ", time.strftime("%a, %d %b %Y %H:%M:%S
-03", time.gmtime())
if os.path.exists('Job-er1.lck'):
os.remove("Job-er1.lck")
for f in os.listdir('.'):
if re.search('Job\-er1',f) and re.search('odb',f)==None:
os.remove(f)
fout.flush()
fout.close()