內(nèi)容參考說(shuō)明asrpt_第1頁(yè)
內(nèi)容參考說(shuō)明asrpt_第2頁(yè)
內(nèi)容參考說(shuō)明asrpt_第3頁(yè)
內(nèi)容參考說(shuō)明asrpt_第4頁(yè)
內(nèi)容參考說(shuō)明asrpt_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Lessoncontent:

CallbackFunctionsWorkshop12(Optional):JobMonitoringCustomDataScriptingIdeasforProductivityWorkshop13:BasicScriptingStyleConsiderationsSettingAbaqusDefaultsC++insteadofPythonParameterstudiesWorkshop14(Optional):UsingtheParametricScriptingFileLesson7:MiscellaneousTopics3hoursCallbackFunctions(1/12)CallbackfunctionsPartoftheprogramthatcatcheseventsandprocessesthemWhatisanevent?DefinitionofactionsperformeduponinputfromtheuserorthesystemExamplesofuserinput:mousemovement,keystrokes,etc.Examplesofsysteminput:shutdown,applicationstate,etc.Event-drivenprogramEvent-drivenprogramsareincontrasttoabatchorientedoperation;anapproachthatcontinuouslyprocessesthenextitemfromagroup.Event-drivenprogramsstart,waitforeventsandonlystopwhentoldtodoso—byanevent.CallbackFunctions(2/12)Kernel-sideevent-drivenprogrammingwithAbaqusAbaqusanalysisproducts–JobMonitoringYoumayassociateanevent-drivenfunctionwithaparticularmessagethatisobtainedfromAbaqus/StandardorAbaqus/Explicit.Thefollowingmethodisavailableforcreatingcallbackfunctions: addMessageCallback()–amethodthatspecifiesauserdefinedcallbackfunctionthattobecalledwhenamessageisreceivedfromthesolver. Thepletion()methodcanbeusedtoavoidusingcallbacks.Ithaltstheexecutionofascriptuntiltheendofananalysisjob.Abaqus/CAE–ModuleorMethodMonitoringYoumayalsoassociateevent-drivenfunctionswithAbaqus/CAE addMethodCallback()–amethodthatspecifiesacallbackfunctiontobecalledwhenanAbaqus/CAEmethodisexecuted.CallbackFunctions(3/12)Jobmonitoring–waitingforjobstocompleteThisistheeasiestwaytowritescriptsbasedonthebehavioroftheanalysisjob.Thebehaviorislimitedtojobcompletion.Example:UsejobmonitoringtosubmitajobcalledmyJob1andwaitforittocompletebeforesubmittingasecondjobcalledmyJob2.myJob1=mdb.Job(name='Job-1',model='Model-1')myJob2=mdb.Job(name='Job-2',model='Model-2')myJob1.submit()pletion()myJob2.submit()pletion()ThemethodisanattributeofthejobobjectCallbackFunctions(4/12)Jobmonitoring–respondingtojobmessagesInsomecases,youmaywanttoprocessmessagesfromtheanalysiswhileitisrunninganddosomethingotherthanjustwait;forexample,terminatethejobwhenacriterionisreachedorplotresultsastheanalysisprogresses.ThisisplishedbywritingacallbackfunctionandregisteringitwiththemonitorManagerobject.ThefollowingistheformatofmessagecallbackdefinitiondefcallbackFuncName():<body>fromjobMessageimport*monitorManager.addMessageCallback(jobName,messageType,callBackFuncName,userData)ThemethodisanattributeofthemonitorManagerobjectCallbackFunctions(5/12)ArgumentstotheaddMessageCallback()methodjobNameStringspecifyingthenameofthejobtobemonitored.UsethesymbolicconstantobjectcalledANY_JOBtospecifythatthecallbackappliestoalljobnames.messageTypeThefollowingarethemessagetypesissuedbytheAbaqusanalysisproducts ABORTED,COMPLETED,END_STEP,ERROR,HEADING,ITERATION,JOB_SUBMITTED,MONITOR_DATA,ODB_FILE,ODB_FRAME,STEP,STARTED,STATUS,WARNINGuserDataAnyuser-definedobject(orNone)tobepassedtothecallbackfunctionCallbackFunctions(6/12)CallbackfunctionsyntaxThefollowingformatisusedtodefineanAbaquscallbackfunction:

defcallbackFuncName(jobName, messageType, data, userData)ThesegetpassedtothefunctionCallbackFunctions(7/12)ArgumentstotheaddMessageCallback()method(cont’d)dataThefollowingdescribethemembersofthedataobject:clientHost nameofhostrunningthejobclientName nameofclientthatsentthemessage

(BatchPre,Packager,Standard,Explicit,

Calculator)Phase Asymbolicconstantspecifyingthephaseoftheanalysis

(BATCHPRE_PHASE,PACKAGER_PHASE,STANDARD_PHASE, EXPLICIT_PHASE,CALCULATOR_PHASE)processId processIDofanalysisprogram

threadId threadIDoftheanalysisprogramtimeStamp timethemessagewassentCallbackFunctions(8/12)Example:AsimplecallbackfunctionTask:printinformationforanykindofsolvermessage fromabaqusimportmonitorManager

fromjobMessageimportANY_MESSAGE_TYPE,ANY_JOB defsimpleCB(jobName,mType,data,userData): print'Jobname:%s,Messagetype:%s'%(jobName,mType)

print'datamembers:' members=dir(data)

format='%-18s%s'

printformat%('member','value') formemberinmembers:

memberValue=getattr(data,member)

printformat%(member,memberValue)CallbackFunctions(9/12)Example:Asimplecallbackfunction(cont’d)defprintMessages(start=ON):"""SwitchmessageprintingONorOFF"""ifstart:monitorManager.addMessageCallback(ANY_JOB,ANY_MESSAGE_TYPE,simpleCB,None)else:monitorManager.removeMessageCallback(ANY_JOB,ANY_MESSAGE_TYPE,simpleCB,None)methodtocreatecallbackmessagesuserfunctiontoprovideconvenientmeansforturningon/offthemessagecallbackmethodtodeletecallbackmessagesCallbackFunctions(10/12)ModulemonitoringTheAbaqusenvironmentfile(abaqus_v6.env)isreadbyAbaqus/CAEwhenyoustartasession.Aswesawinanearlierworkshop,theenvironmentfilecancontaincallbackmessagingcommands.Forexample:

#VisualizationpreferencesdefsetVisPref(module,userData):importpartsession.viewport['Viewport:1'].partDisplay.setValues(renderStyle=SHADED)

addImportCallback('part',setVisPref)CallbackFunctions(11/12)IssuesrelatingtocallbackfunctionsMessagingcommandsareavailableonlyifAbaqus/CAEisruninteractivelyusingtheGUI.CallbacksareremovedwhentheAbaqus/CAEsessionisterminated.UseremoveMessageCallback()methodtoremoveitfromthesystem.Theargumentsforthismethodmustbeidenticaltotheargumentsofthecorrespondingmethodthatdefinedthecallback.Unpredictablebehaviorwillresultfromredefiningcallbackswithoutfirstremovingthem.CallbackFunctions(12/12)ThemethodCallbackAcallbackcanbeaddedforanyAbaqus/CAEcommandKnownasamethodCallback.ThecallbackcanbecalledbeforeandaftertheAbaqus/CAEcommandiscalled.TheargumentstotheAbaqus/CAEcommandarepassedtothecallback.UseaddMethodCallback(),removeMethodCallback().Example:importmethodCallbackfromjobimportModelJobTypedefmyCallback(callingObject,pargs,kwargs,userData):print'Aninputfileisabouttobewritten.'

methodCallback.addCallback(ModelJobType,'writeInput',myCallback)ThiscallbackwillonlybecalledwhenthemethodwriteInputiscalledonanobjectoftypeModelJobType.Whenyoucompletethisworkshopyouwillbeableto:writesimplecallbackfunctionsthatrespondtomessagessentbyanalysisjobsresorttolookingattheanswerfilewhenallelsefailsWorkshop12:JobMonitoring60minutesCustomData(1/6)Whatiscustomdata?CustomdataistheframeworkthatisprovidedinAbaqus/CAEforstoringspecialpersistentandnon-persistentinformation.MdbaccessAbaquscreatesthreecustomdatacontainerswhenthecustomKernelmoduleisimported.Example:>>>mdb.customDataAttributeError:'Mdb'objecthasnoattribute'customData'>>>importcustomKernel>>>mdb.customDatamdb.customData>>>session.customDatasession.customDataCustomData(2/6)OdbaccessCustomdataisavailablewithanyoutputdatabase(ODB)file.NotavailablethroughC++ODBAPIManuallyrequiredtosaveExample:>>>importcustomKernel>>>odb=session.odbs['D:\temp\viewer_tutorial']>>>odb.customData.i=1>>>odb.customData.i1>>>odb.save()CustomData(3/6)ExampleofdatapersistenceThefollowingkernelcodestoressomecustomvaluesinanMDB:IftheMDBisclosedandthenreopened,thevaluescanberetrieved:importcustomKernelmdb=Mdb()mdb.customData.myString='Version1'

mdb.customData.myNumber=612mdb.saveAs('custom-test.cae')>>>mdb=openMdb('custom-test.cae')>>>printmdb.customData.myString'Version1'

>>>printmdb.customData.myNumber612CustomData(4/6)DatapersistenceDatastoredundercustomDatawillautomaticallybesavedtotheAbaqus/CAEmodeldatabasewhenFile→Saveisselected.Foroutputdatabase,use

save()method.Note:AbaqusdoesnottrackchangesmadetothecustomDataobject;therefore,ifchangesweremadeonlytothecustomDataobject,theuserwillnotbepromptedtosavechangeswhenquittingasession.CustomData(5/6)SupportedobjectsThecustomDataobjectsupportsalmostanykindofPythondata(strings,numbers,functions,classes).TherulesaresimilarthosethatapplytothePythonpicklemodule(seeAppendix1).Abaqusobjectsarenotsupported.CustomData(6/6)customDataisalsoavailableforMdbattributessuchasModel,Part,PartInstance,Assembly,Step,Material,...Allowsmoreflexibilityinstoringattribute-specificdata>>>importcustomKernel>>>mdb.models['Model-1'].rootAssembly.CustomData()mdb.models['Model-1'].rootAssembly.customData>>>cd=mdb.models['Model-1'].rootAssembly.customData>>>#Storespotweldlocations>>>cd.spotWeldLocations=((0.,0.,0.),(1.,0.,1.),...)>>>mdb.models['Model-1'].materials['ABS'].CustomData()mdb.models['Model-1'].materials['ABS'].customData>>>cd=mdb.models['Model-1'].materials['ABS'].customData>>>#Storeexperimentaldataforfuturereference>>>cd.exptData=((0.0,0.0),(1.0,0.001),...)>>>mdb.saveAs('myModel.cae')ScriptingIdeasforProductivity(1/12)ScriptingperformanceBasicconsiderationsforcodedevelopmenttimeUsePythonfunctionalityfirst.Ifperformanceiscritical,extendAbaqusPythonwithCorC++.TheC++APItotheODBismoreefficientthanthePython-basedAPI.BasicconsiderationsforPythonperformanceCodingstylecanaffecttheefficiencyofyourPythonscripts.Ingeneral,workingwithhigh-levelobjectsismoreefficientthanworkingwithlow-levelobjects.Avoidaccessingattributesthatrequiretheuseofcomputationallyintensivemethods.Forexample:minimizethenumberofcallstogetSubset()andaddData()methods.Usearrayobjectsinsteadoftupleswhendealingwithlargeamountsofdata.Beawarethatthereissomeoverheadassociatedwithfunctioncallsacrossmodules.Makeuseofbuilt-infunctions.Theyareoftenoptimizedforperformance.Makeuseof3rd-partymodules.Theyareoftenoptimizedforperformance.ScriptingIdeasforProductivity(2/12)Scriptingperformance(cont’d)PythonsequenceunpackingGenerally,thesequenceunpackingstyleinPythonhasamoderateinfluenceonperformance.Considerthreevariationsofmakingthesamerepetitiveassignmentsfora,b,c:foriinrange(number):a=bigList[i][0]b=bigList[i][1]c=bigList[i][2]foriinrange(number):a,b,c=bigList[i]forsubListinbigList:a,b,c=subListLessefficientMoreefficientfora,b,cinbigList:...ScriptingIdeasforProductivity(3/12)Scriptingperformance(cont’d)AbaqusPythonsequenceunpackingWARNING:SequenceunpackingstylewiththeAbaqusobjectmodelcanhaveasignificantinfluenceonperformance.Considerthreevariationsofreadingthesamestressinformation:forvaluein(myStress.values):value.dataMoreefficientforiinrange(len(myStress.values))myStress.values[i].dataDonotdothis!!!tmpStressValues=myStress.valuesforiinrange(len(tmpStressValues)):tmpStressValues[i].dataLessefficientScriptingIdeasforProductivity(4/12)MaintainingscriptsacrossreleasesAPIsyntaxchangesbetweenreleases–adilemma?PROBLEM:TheAbaqusScriptingInterfacechangesfromreleasetorelease.ActualchangestotheODBformatandtheunderlyingcodethatisusedtoaccessODBdatamightbesignificantinthelongterm.Changestosyntaxareintendedbeminimized,buttheywilloccur.TheAbaqusReleaseNoteswilldocumentallAPIsyntaxchangesSIGNIFICANCE:AbaqususersareaccustomedtousingmultiplereleasesatatimeSOLUTION:Howshouldusersdealwithsyntaxchanges?Someoptions:(1)Maintainmultipleversionsofscripts(2)Createametaprogramforhandlingcross-releaseperformance(ametaprogramisonethatmanagestheperformanceofotherprograms)(3)Turnondeprecatedsyntaxusingthepatibilityobject(4)UsetheconversionutilitysuppliedwithAbaqus(moreaboutthislater).(5)Otherideas?ScriptingIdeasforProductivity(5/12)Maintainingscriptsacrossreleases(cont’d)Example:UsingthepatibilityobjectThepatibilityobjectenablestheusertocontrolaccesstodeprecatedcommandsintheAbaqusScriptingInterface.Asanaddedfeature,dataiscollectedonwhichdeprecatedcommandshavebeenused.TheincludeDeprecatedattributeprovidesON/OFFusercontrol.ThedefaultvalueisON.Forexample:>>>patibility.includeDeprecatedON>>>len(dir(odb))68>>>patibility.setValues(includeDeprecated=OFF)>>>len(dir(odb))67ScriptingIdeasforProductivity(6/12)Maintainingscriptsacrossreleases(cont’d)UsingtheAbaqusscriptconvertutilityAplug-inisavailableunderPlug-ins→Abaqus→UpgradeScripts.Theplug-incanupgradescriptstoAbaqus6.12fromanyreleaseolderthan6.2Similarscriptsforpreviousreleasesarealsoavailable.AscriptcalledupgradeScript611_612.pyisavailablewith6.12.ThisscriptisautilitytoconvertAbaqusScriptingInterfacescriptswrittenforAbaqus6.11,foruseinAbaqus6.12.Themendedstrategyistoupgradeyourscripts,andthenruntheminAbaquswithincludeDeprecatedturnedOFF,toensurethattheycomplywiththelatestscriptingAPI.ScriptingIdeasforProductivity(7/12)Maintainingscriptsacrossreleases(cont’d)ConstructorargumentsItismendedthatyouusekeywordarguments,sincetheycanbesuppliedinanyorderandtheymakeyourscriptseasiertoreadanddebug;forexample: newViewport=session.Viewport(name='myViewport', origin=(10,10),width=100,height=50)UsingkeywordsmakesthescripteasiertoupgradeusingtheupgradeScriptutility.Ifyouchoosenottousekeywords,theargumentsmustbeprovidedintheorderinwhichtheyaredocumented.: newViewport=session.Viewport('myViewport',(10,10),100,50)ScriptingIdeasforProductivity(8/12)Maintainingscriptsacrossreleases(cont’d)LimitationsoftheupgradeScriptutilityTheupgradeScriptutilityworksbestonscriptswithoutprogramcontrolItwillnotworkifanASIcommandiscalledwithoutreferencetooneoftherootobjects(mdb,session,openOdb(),Odb())defdoIt(x):x.setValues(reduceColors=ON)IfthereferenceiswithinthefunctionitwillbeOKdefdoit():x=session.printOptionsx.setValues(reduceColors=ON)Cannotconvertcertaincommands.Forexample,theSketchcommand(usedinAbaqus6.5andprior)wasreplaced(Abaqus6.6andlater)withConstrainedSketch.m=mdb.models['Model-1']<callsomeSketchcommands>m.convertAllSketches()ScriptingIdeasforProductivity(9/12)Statuscommands(writingtexttomessageandpromptarea)printmessagePestone(message,[...])Thisfunctiondisplaysastringinthepromptarea.

print

'testlandmark' importtime message="testoperation";object='test';total=25 foriinrange(total):

milestone(message,object,i,total) time.sleep(.2)ScriptingIdeasforProductivity(10/12)Example:AbaqusfilecleanuputilityWritescriptstohelpcleanupyourdirectories.Forexample:#scr_cleanup.pyimportosextensionList=['.log','.msg','.prt','','.abq','.dat','.mdl','.pac','.res','.sel','.stt','.pes','.pmg','.sta','.fil','.fin','.par']forextensioninextensionList:os.system('del*'+extension)RecallthatthedelstatementisusedtodeleteobjectsHowever,fordeletingsomeASIobjects(suchasviewports),delhastobeusedonlywiththefullyqualifiedidentifierdelsession.viewports['Viewport:1']vp=session.viewports['Viewport:2']delvp#doesnotdeletetheviewportvp NameError:Thereisnovariablenamed'vp'ScriptingIdeasforProductivity(11/12)Example:AutosubmitthreeAbaqusjobs,one-at-a-timeMethod#1:Runstand-alonescriptfromthesystemcommandline.#scr_auto_run1.pyimportosjobs=['auto_job1','auto_job2','auto_job3']path='C:\\Abaqus6\\Commands\\abq6121'#path=r'C:\Abaqus6\Commands\abq6121'#path='mands/abq6121'forjobinjobs:print'job:',jobcmd='%sjob=%sinter'%(path,job)os.system(cmd)SamebehaviorNote:Thepathtotheexecutabledependsontheinstallation.ScriptingIdeasforProductivity(12/12)Example:AutosubmitthreeAbaqusjobs,one-at-a-time(cont’d)Method#2:Runstand-alonescriptfromtheAbaqus/CAECLI.#scr_auto_run2.pyimportjobfromabaqusConstantsimport*jobs=['auto_job1','auto_job2','auto_job3']forjobinjobs:job=mdb.JobFromInputFile(name=job,inputFileName=job+'.inp',type=ANALYSIS)job.submit()pletion()Whenyoucompletethisworkshopyouwill:knowhowtoavoidacommonscriptingstyleperformanceissueyouwillusethefileviewer_tutorial.odbintheworkshopdirectory.Workshop13:BasicScriptingStyleConsiderations60minutesSettingAbaqusDefaults(1/6)TheAbaqusenvironmentfileThenameofthefileisabaqus_v6.envThisfileisrunwhenAbaqusstarts.UsesPython/ASIsyntax.Itcanbeusedtosetdefaultsfordisplayoptions,etc.ItmaycontainsomeoptionalPythonfunctionsthatarecalledbyAbaqus,suchas:onCaeStartup()onCaeGraphicsStartup()onJobStartup()pletion()Abaquslooksforafilenamedabaqus_v6.envinthesite_dir,home_dir,andlocal_dirandwillexecuteeachoneinsuccession.IfmorethanoneversionoftheabovePythonfunctionsisfound,eachonewillbecalled.Inthecaseofenvironmentvariables,asubsequentdefinitionwilloverwriteapreviousdefinition.SettingAbaqusDefaults(2/6)abaqus_v6.envCertainvariablesarepredefinedinpletionandonJobStartup.Theseinclude:savedir,id,scrdir,analysisType,applicationName,abaqus_version.defpletion():importosextensions=('res','stt','mdl','prt','abq','pac')restartDir=savedir+id+'_restart'+os.sepif(notos.path.exists(restartDir)):os.mkdir(restartDir)forextensioninextensions:fileName=id+'.'+extensionif(os.path.exists(savedir+fileName)):os.rename(savedir+fileName,restartDir+fileName)defonJobStartup():importos,osutilsrestartDir=savedir+id+'_restart'if(os.path.exists(restartDir)):osutils.removeTree(restartDir)SettingAbaqusDefaults(3/6)abaqus_v6.env##assignsomevariables#memory=50explicit_precision=[SINGLE_PRECISION,DOUBLE_PRECISION][0]ask_delete=ONcae_no_parts_input_file=ONauto_calculate=ONodb_output_by_default=OFFprinted_output=OFFprint_flattened_file=ONSettingAbaqusDefaults(4/6)AvailablevariablesThefollowingnamesexistwithintheonJobStartup()andpletion()functions:id Thejobidentifierspecifiedbytheuser.savedir Thepathnamefromwhichthejobwassubmitted.scrdir Thepathnametothescratchdirectory(sameasos.getcwd()).analysisType Thetypeofanalysistobeexecuted.defpletion():forglobinglobals().keys():ifglob!='__builtins__':print'%s=%s'%(glob,eval(glob))scrdir=C:\scratch\new_beam3d_1364id=new_beam3dsavedir=C:\tempanalysisType=STANDARDabaqus_v6.envSettingAbaqusDefaults(5/6)Availablevariables(cont’d)ThefollowingnamesexistoutsideoftheonJobStartup()andpletion()functionsintheenvironmentfile:abaqus_version- AstringthatcontainstheAbaqusversion.analysisType- Thetypeofanalysistobeexecuted.applicationName- Thenameoftheexecutionprocedure.Inadditiontothesetherearemanyothernamesthatexistwhentheenvironmentfileisrun.Forexample,alloftheAbaqusenvironmentvariables.forglobinglobals().keys():ifglob!='__builtins__':ifglob!=str(eval(glob)):print'%s=%s'%(glob,eval(glob))submodel=OFFcontact=OFFparval=OFFabaqus_version=6.7-1aqua=OFFadmin=[]dsa=OFFjob=new_beam3dpartsAndAssemblies=OFFpre_memory=33554432importer=OFFlmsvrdownlimit=0datacheck=NonerestartWrite=ONsymmetricModelGeneration=OFFoutputKeywords=ONdataLineCheck=ONrestart=OFFanalysisType=STANDARDrezone=OFFinput=new_beam3dstandard_memory=33554432applicationName=datacheckrunCalculator=OFFpartiallistabaqus_v6.envSettingAbaqusDefaults(6/6)ExecutionenvironmentTheabaqus_v6.envfileisnotaPythonmodule(althoughitlookslikeone).Eachofthefunctionsdefinedintheabaqus_v6.envfileareexecutedintheirownspecialnamespacewhichisdifferentfromtheouternamespaceoftheabaqus_v6.envfile(andnotthesameaseachother).Variablesthatexistintheouternamespaceoftheabaqus_v6.envfilearenotavailableinsidethefunctions:onCaeStartup()onCaeGraphicsStartup()onJobStartup()pletion()Ontheotherhand,somevariablesaresuppliedbyAbaqusbydefault.Tofindtheavailablevariables,lookinthereleasenotes,orprintouttheglobalvariablesasdescribedinthepreviousslides.C++insteadofPython(1/2)AccessingtheODBwithC++insteadofPython

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論